Skip to content

Example: Medwick Healthcare Trust -- MyMedwick Patient Portal

About This Example

This is a fictional but realistic Solution Architecture Document for Medwick Healthcare Trust’s MyMedwick Patient Portal. It demonstrates the Architecture Description Standard at Comprehensive depth for a Tier 1 Critical clinical system governed by MediCore clinical safety standards and UK data protection law. Every section is completed with realistic content showing what a mature, well-documented SAD looks like for a Trust-class solution where patient harm is a credible risk.

Fictional organisation: Medwick Healthcare Trust — a mid-sized national-health-service-style hospital trust, approximately 12,000 staff, serving 800,000 patients across three acute sites and a network of community clinics. Fictional solution: MyMedwick Patient Portal — a web and mobile application providing outpatient appointment management, test results, letters, and prescription management to patients, integrated with the Trust’s Electronic Patient Record (EPR), the MediCore Spine, and MediCore e-Referral Service.


FieldValue
Document TitleSolution Architecture Document — MyMedwick Patient Portal
Application / Solution NameMyMedwick Patient Portal
Application IDMHT-APP-0208
Author(s)Dr Raj Doe (Solution Architect, Digital Clinical Systems)
OwnerDr Raj Doe
Version2.0
StatusApproved
Created Date2025-02-10
Last Updated2026-03-28
ClassificationConfidential — Healthcare
VersionDateAuthor / EditorDescription of Change
0.12025-02-10Dr Raj DoeInitial draft with executive summary, scope, and logical view
0.22025-03-04Dr Raj DoeAdded physical view, data view, integration with EPR and Spine
0.32025-03-25Jane BloggsInformation security review feedback incorporated
0.42025-04-08Dr Amir DoeClinical safety review; Hazard Log reference added (CS-129/0160)
0.52025-04-22Sally BloggsInformation Governance review; DPIA and CS-160 status incorporated
1.02025-05-14Dr Raj DoeFirst approved version following Design Authority and CSG sign-off
1.12025-09-02Dr Raj DoeAdded GP Connect integration (Phase 2 — appointment availability)
1.22025-11-19Dr Raj DoeUpdated following annual DSPT submission and MediCore Digital assurance review
2.02026-03-28Dr Raj DoeMajor revision: Azure AD B2C for patient auth (ADR-003 superseded), SMS fallback redesign, updated clinical safety case v3
NameRoleContribution Type
Dr Raj DoeSolution Architect (clinical background — former ICU consultant)Author
Dr Amir DoeClinical Safety Officer (CSO) — consultant haematologistAuthor / Approver
Sally BloggsInformation Governance (IG) Lead & Data Protection OfficerAuthor / Approver
Jane BloggsChief Information Security Officer (CISO)Reviewer / Approver
Mark DoePrincipal Infrastructure Engineer (Azure Landing Zones)Reviewer
Priya BloggsData Architect (MediCore healthcare data standards, FHIR R4)Reviewer
Tom DoeHead of Service Management (ITIL)Reviewer
Helen BloggsCaldicott Guardian (Medical Director)Approver
Dr Fiona DoeChief Clinical Information Officer (CCIO)Approver
Robert BloggsChief Digital Information Officer (CDIO)Approver
Nisha DoeDirector of Patient ExperienceReviewer
Paul BloggsSenior Responsible Officer (SRO) / Deputy CEOApprover
Design Authority (Medwick)Architecture Review Board (chaired by Robert Bloggs)Approver

This SAD describes the architecture of MyMedwick, Medwick Healthcare Trust’s patient-facing digital service. The portal gives patients secure, self-service access to their outpatient appointments, clinic letters, test results, and repeat prescription requests. It reduces clinic DNA (Did Not Attend) rates, eases the administrative burden on outpatient booking teams, and supports the Trust’s commitment to the MediCore National Digital Health Plan objective of digital-first patient access.

In scope:

  • MyMedwick web application (React) and mobile applications (iOS, Android)
  • Azure landing zone resources in UK South (primary) and UK West (DR)
  • Integration with Trust EPR (Cerner Millennium), Pharmacy (JAC), Pathology (Clinisys WinPath), PACS (GE Centricity)
  • Integration with MediCore Spine (PDS, SCR), MediCore e-Referral Service, GP Connect (appointment availability only)
  • Patient identity (Azure AD B2C) and clinician identity (MediCore CIS)
  • Azure Communication Services SMS and email (appointment reminders, OTP, notifications)
  • Clinical safety case (CS-129) and deployment safety case (CS-160)
  • Operational tooling: Microsoft Sentinel, Azure Monitor, App Insights

Out of scope:

  • Trust EPR (Cerner Millennium) internals — documented in SAD MHT-APP-0010
  • Clinician-facing EPR workflows — out of scope for patient portal
  • Medicines prescribing decisions (handled by EPR and JAC; MyMedwick only surfaces prescriptions issued by clinicians)
  • Video consultation platform (SAD MHT-APP-0157, Attend Anywhere)
  • Staff SharePoint intranet and non-clinical systems

Related documents:

  • Trust Digital & Data Strategy 2024-2029 (STRAT-DDS-2024)
  • Medwick Information Security Policy (MHT-SEC-POL-001)
  • Medwick Clinical Risk Management Policy (MHT-CRM-POL-003)
  • CS-129 Hazard Log — MyMedwick (MHT-HAZ-LOG-0208)
  • CS-160 Deployment Safety Case — MyMedwick (MHT-DSC-0208)
  • MediCore Data Security & Protection Toolkit Submission 2025/26 (Organisation Code: RX9)

MyMedwick is a web and mobile patient portal that gives patients of Medwick Healthcare Trust secure, real-time access to their outpatient care. Patients can view and reschedule appointments, read clinic letters, see pathology and radiology results released by their clinical team, request repeat prescriptions, update contact preferences, and opt in or out of SMS reminders.

The solution is built on Microsoft Azure (UK South primary, UK West DR) using a layered architecture: React single-page application for the web front end; Ionic/Capacitor hybrid mobile apps; .NET 8 microservices behind Azure API Management; Azure SQL for portal-owned data; and an integration layer that exposes and consumes FHIR R4 APIs against the Trust EPR, the MediCore Spine, and the MediCore e-Referral Service. Patient identity is provided by Azure AD B2C with MediCore-compatible identity proofing; clinician identity (for staff administration functions) is provided by MediCore CIS.

Clinical safety has been assessed under CS-129 (manufacturer) and CS-160 (deployment). A Clinical Safety Officer (Dr Amir Doe) has signed off the clinical safety case; the Hazard Log is actively maintained. The service is included in Medwick’s annual Data Security and Protection Toolkit (DSPT) submission.

DriverDescriptionPriority
MediCore National Digital Health Plan — digital-first patient accessNational commitment for every patient to have digital access to their outpatient records, appointments and prescriptionsCritical
Reduce outpatient DNA rateTrust DNA rate for outpatient appointments is 9.4% (national benchmark 6.7%); target reduction of 2 percentage points through self-service rescheduling and SMS remindersHigh
Reduce call centre burdenOutpatient booking team handles approximately 3,200 calls/day, of which 62% are appointment enquiries resolvable via self-serviceHigh
Improve patient experience and CQC Well-Led evidencePatient survey satisfaction with appointment communications at 58%; target improvement to greater than 75%High
Replace ageing patient portal (Patient Knows Best pilot)Existing PKB pilot covers only 40,000 patients, lacks mobile app, and contract expires 2026-Q3High
Support ICS-wide digital front door objectiveAlign with Medwick Integrated Care System (MICS) digital strategy for a unified patient-facing channelMedium
QuestionResponse
Which organisational strategy or initiative does this solution support?Trust Digital & Data Strategy 2024-2029, Priority 2: Empowering Patients; Priority 4: Reducing Unwarranted Variation
Has this solution been reviewed against the organisation’s capability model?Yes — mapped to Patient Digital Engagement, Identity & Access (Patient), Clinical Messaging, and Records Access capabilities
Does this solution duplicate any existing capability?Partially — supersedes the Patient Knows Best pilot (being decommissioned); complements (does not replace) Attend Anywhere video consultation platform
CapabilityShared Service / PlatformReused?Justification (if not reused)
Patient IdentityMediCore login (national service)NoEvaluated in ADR-003; rejected in favour of Azure AD B2C due to Trust control over identity proofing journey, faster enrolment, and ability to federate MediCore login as an external IdP later if required
Clinician IdentityMediCore CIS (Clinician Identity Service)YesMandatory for MediCore staff accessing patient-identifiable data; used for admin / service desk functions
Spine IntegrationMediCore Spine (PDS, SCR) via TLS-MAYesNational service, mandatory for Patient Demographic Service lookups
e-ReferralMediCore e-Referral Service (e-RS)YesNational service, mandatory for outpatient referral lifecycle
SMS / EmailAzure Communication Services (ACS)YesTrust has enterprise Azure agreement; ACS supports UK data residency
Secure EmailMediCoreMailYesUsed for clinical correspondence notifications where appropriate
SIEMMicrosoft Sentinel (Trust tenant)YesCorporate SIEM
CI/CDAzure DevOpsYesTrust standard
SecretsAzure Key VaultYesTrust standard
EPRCerner Millennium (Oracle Health)YesAuthoritative record of clinical care
  • MyMedwick React web application (responsive) hosted on Azure App Service
  • iOS and Android mobile applications (Ionic + Capacitor) published via Apple App Store and Google Play
  • Backend-for-Frontend (BFF) and domain microservices on Azure App Service (Linux, .NET 8)
  • Azure API Management (external and internal products) with WAF (Azure Front Door Premium)
  • Azure SQL Database for portal-owned state (preferences, consent, sessions)
  • Azure Service Bus for asynchronous notification and integration events
  • FHIR R4 facade microservice integrating EPR (Cerner Millennium HL7v2 + FHIR), PACS, Pathology, and Pharmacy
  • Integration with MediCore Spine via national healthcare secure network/Message Exchange for Social Care and Health (MESH) and TLS-MA
  • Azure AD B2C for patient identity (custom policies, MFA, step-up for sensitive actions)
  • MediCore CIS for clinician identity (service desk admin)
  • Azure Communication Services for SMS and email (appointment reminders, OTP, notifications)
  • Microsoft Sentinel SIEM integration and Azure Monitor/App Insights observability
  • Clinical safety (CS-129/CS-160) artefacts and Hazard Log
  • Annual DSPT submission content relating to this service
  • Trust EPR (Cerner Millennium) clinical workflows and configuration (SAD MHT-APP-0010)
  • Prescribing decision logic (handled by JAC / EPR)
  • Attend Anywhere video consultation platform (SAD MHT-APP-0157)
  • Non-patient-facing data warehouse and BI reporting (SAD MHT-APP-0055)
  • Direct GP system integration beyond GP Connect appointment availability (Phase 2 descope; Phase 3 candidate)
  • MediCore Spine PDS / SCR availability and interface versions
  • MediCore CIS availability for clinician authentication
  • MediCore e-Referral Service API availability and version
  • Cerner Millennium HL7v2 and FHIR interface availability
  • Azure UK South and UK West regional availability

The Trust currently offers limited digital patient access:

  • A Patient Knows Best (PKB) pilot covering ~40,000 patients across renal and diabetes services, providing records access only (no appointment management, no prescriptions). PKB is contracted until 2026-Q3.
  • A text reminder service (commercial SMS gateway, Firetext) sending appointment reminders two days before appointment. This has no patient interaction — patients cannot confirm, cancel, or reschedule from the SMS.
  • An online appointment cancellation form (SharePoint-based) which posts to a shared mailbox and is manually processed by the booking office during working hours.

Key limitations of the as-is:

  • No unified patient-facing portal; patients must telephone the booking office for all changes
  • No mobile app; PKB web app is not usable on mobile
  • DNA rate 9.4% (above national benchmark of 6.7%)
  • Approximately 62% of booking office calls are resolvable by self-service
  • No surfacing of test results to patients; results are conveyed by letter (typically 2-3 week delay) or phone call
  • Patient Knows Best contract ends 2026-Q3 — mandatory replacement

What is being retained: Cerner Millennium EPR (authoritative clinical record); MediCore Spine and e-RS integrations (reused via new FHIR facade); MediCoreMail; MediCore CIS. What is being replaced: Patient Knows Best pilot (decommissioned 2026-Q3); Firetext SMS (replaced by Azure Communication Services); SharePoint cancellation form. What is being decommissioned: PKB integration, Firetext contract, SharePoint appointment cancellation form — all after 3-month parallel run.

Decision / ConstraintRationaleImpact
Microsoft Azure as hosting platformTrust enterprise Azure agreement; Azure UK South/West provide sovereign UK data residency; ISO/IEC 27018 assurance for cloud PII; NCSC/MediCore Authority pattern alignmentAll infrastructure on Azure; no AWS or GCP
All data (including PII and clinical data) in UK regionsUK GDPR, MediCore Data Security & Protection Toolkit, and Caldicott Principle 7 (data sharing)UK South primary, UK West DR; no data replication outside UK
FHIR R4 as the canonical clinical data contractMediCore Authority interoperability standards and forward compatibility with ICS-wide data sharingFHIR facade microservice required; HL7v2 from EPR translated to FHIR
Azure AD B2C for patient identity (not MediCore login)Trust control over identity proofing, enrolment UX, and MFA policy; MediCore login can be added as federated IdP in a later phaseCustom B2C policies to be maintained; explicit ADR (ADR-003)
CS-129 and CS-160 clinical safety compliance mandatoryMediCore Digital’s mandatory clinical safety standards for any health IT system with clinical impactClinical Safety Officer required; Hazard Log maintained; deployment safety case signed before go-live
Two-factor authentication required for all patientsUK GDPR Article 32 and MediCore CIS assurance equivalenceSMS OTP (default), TOTP authenticator (advanced); step-up MFA for prescription requests
FieldValue
Project NameMyMedwick Patient Portal
Project Code / IDPROJ-0208
Project ManagerClaire Bloggs
Senior Responsible Officer (SRO)Paul Bloggs (Deputy CEO)
Estimated Solution Cost (Capex)GBP 1,450,000 over 2 years (discovery, alpha, beta, live)
Estimated Solution Cost (Opex)GBP 420,000 per annum (hosting, licences, support, clinical safety maintenance)
Target Go-Live DatePublic beta: 2025-05-14 (achieved); general availability: 2025-11-04 (achieved); Phase 2 (GP Connect): 2025-09-02 (achieved); Phase 3 (results summary dashboards): 2026-Q3

Selected criticality: Tier 1: Critical

Justification: MyMedwick is a Tier 1 Critical clinical system because failure modes include potential patient harm:

  • Clinical safety: Incorrect results display, mis-identification of a patient’s record, or silent failure of appointment reminders could contribute to patient harm (missed appointment for time-sensitive oncology follow-up; acting on wrong results). Clinical risk assessed and documented in the Hazard Log (MHT-HAZ-LOG-0208).
  • Service continuity: At steady state, MyMedwick is the primary digital channel for ~280,000 enrolled patients. Extended outage would substantially increase call centre load (projected x3.5 call volume within 24 hours of outage).
  • Regulatory exposure: A confidentiality breach of patient data would require ICO notification within 72 hours (UK GDPR Art 33) and trigger mandatory reporting under the MediCore DSPT.
  • Reputational: Patient trust and Trust Board reputation sensitivity is high; CQC Well-Led and Responsive domains reference digital access.
  • Financial impact: Not the primary driver, but DNA reduction target (2 pp) represents ~GBP 1.8m/year of recovered clinic capacity.

StakeholderRole / GroupKey ConcernsRelevant Views
Paul BloggsSRO / Deputy CEOStrategic alignment, benefit realisation, political and regulatory riskExecutive Summary, Governance
Robert BloggsCDIOArchitecture alignment, Azure strategy, cost, assuranceAll views
Dr Fiona DoeCCIOClinical workflow alignment, clinical risk, clinician adoption (admin users)Logical, Data, Security, Scenarios
Dr Amir DoeClinical Safety OfficerClinical safety (CS-129/0160), Hazard Log, clinical risk controlsSecurity, Data, Scenarios, Lifecycle
Helen BloggsCaldicott GuardianInformation governance, Caldicott Principles, patient confidentialitySecurity, Data, Governance
Sally BloggsIG Lead / DPOUK GDPR, DPIA, DSPT, ROPA, consent, subject accessData, Security, Governance
Jane BloggsCISOThreat model, UK GDPR Art 32 controls, DSPT, Cyber Essentials PlusSecurity, Physical
Dr Raj DoeSolution ArchitectDesign integrity, clinical usability, standards compliance, interoperabilityAll views
Mark DoePrincipal Infrastructure EngineerAzure landing zone, network, resilience, DRPhysical, Reliability
Priya BloggsData ArchitectFHIR conformance, data classification, sovereignty, retentionData, Integration
Tom DoeHead of Service ManagementOperability, incident response, ITIL processesOperational Excellence, Lifecycle
Nisha DoeDirector of Patient ExperienceAccessibility (WCAG 2.2 AA), digital inclusion, patient usabilityScenarios, Quality Attributes
Clinical safety panel (CSG)Multi-disciplinary panel chaired by Dr Fiona DoeClinical risk review, Hazard Log, deployment approvalsSecurity, Scenarios, Governance
Patient Participation Group (PPG)Patient representativesUsability, trust, transparency, accessibilityScenarios
Booking office team (operational)Outpatient booking team leaderCall volume reduction, admin exception handlingScenarios, Operational Excellence
ICO (external)Information Commissioner’s OfficeUK GDPR, ICO registration ZA123456Data, Security, Governance
MediCore Authority (external)Digital policy and assuranceInteroperability, DSPT, CS-129/0160 conformance, DSCROData, Security, Governance
MHRA (external, watching brief)Medicines and Healthcare products Regulatory AgencyWhether the portal meets criteria for a medical device (assessed — no, not a clinical decision-support tool)Security, Governance
Patients (end users)Registered enrolled patientsUsability, trust, accuracy, accessibility, privacyScenarios, Integration, Security
Clinical teamsOutpatient clinicians (secondary users via EPR)Data accuracy, results release workflow, not introducing additional adminIntegration, Data, Scenarios
ConcernStakeholder(s)Addressed In
Clinical safety — risk of patient harm from system failure or misuseDr Amir Doe, Dr Fiona Doe, Helen Bloggs, CSG1.8, 3.5, 3.6, 4.2, 5.1, 5.2, 6.3, 6.8
Patient confidentiality and UK GDPR complianceSally Bloggs, Helen Bloggs, Jane Bloggs, ICO3.4, 3.5, 6.8
MediCore Data Security & Protection Toolkit (DSPT) conformanceSally Bloggs, Jane Bloggs, MediCore Authority3.5, 6.8
Clinical data accuracy and interoperability (FHIR R4, HL7v2)Priya Bloggs, Dr Fiona Doe, Dr Amir Doe3.2, 3.4, 3.6
Patient identity assurance (preventing misidentification)Sally Bloggs, Helen Bloggs, Dr Amir Doe3.5, 3.6 (UC-04)
Availability and DR (clinical continuity)Tom Doe, Mark Doe, Dr Fiona Doe4.2
SMS delivery failure for appointment remindersDr Amir Doe, Tom Doe3.2, 4.2, 6.3
GP system integration failure (GP Connect)Priya Bloggs, Tom Doe3.2, 4.2, 6.3
Accessibility (WCAG 2.2 AA, digital inclusion)Nisha Doe, PPG3.6, 4.3
Cost and benefit realisationPaul Bloggs, Robert Bloggs, Finance4.4
Cyber security (ransomware, credential stuffing, denial of service)Jane Bloggs3.5, 6.3
Operational support model and ITIL alignmentTom Doe5.5
Regulation / StandardApplicabilityImpact on Design
UK GDPR & Data Protection Act 2018Mandatory — processes special category personal data (health)Lawful basis (Art 6(1)(e), Art 9(2)(h)); DPIA completed; data minimisation; right of access/erasure/rectification; data residency UK
MediCore Data Security & Protection Toolkit (DSPT) 2025/26Mandatory — annual submission; status Standards Met10 DSPT assertions applicable; evidence mapped; submitted 2025-06-30
CS-129 — Clinical Risk Management: ManufacturerMandatory for health IT systems with clinical impactClinical Safety Officer (Dr Amir Doe) appointed; Clinical Safety Case v3 approved; Hazard Log maintained
CS-160 — Clinical Risk Management: DeploymentMandatory for deploying health IT in health / social care settingsDeployment Safety Case signed off by Trust CSO before each major release
Common Law Duty of ConfidentialityMandatory — Caldicott PrinciplesCaldicott Guardian (Helen Bloggs) approval required for data uses; explicit patient consent for SMS
Human Medicines Regulations 2012Applicable — prescription request surfacingPortal does not prescribe; only surfaces prescriptions issued in EPR/JAC. No clinical decision support.
MHRA — Medical Device assessmentAssessed — not a medical device (no diagnosis/treatment/prevention function)Assessment documented; reviewed annually
Accessibility Regulations 2018 (public sector body)MandatoryWCAG 2.2 Level AA conformance; annual accessibility statement published
MediCore Authority Interoperability StandardsMandatory for new health ITFHIR R4 for external clinical APIs; National Patient ID as primary identifier
ICO registrationMandatoryRegistered (ZA123456); Data Protection Officer: Sally Bloggs
Cyber Essentials PlusTrust certified annuallyInherits Trust certification; additional controls evidenced
ISO/IEC 27001Trust-wide ISMSSolution included in statement of applicability
  • Yes — processes special category personal data (health) under UK GDPR Article 9. Not a regulated medical device (formally assessed). Subject to MediCore-specific clinical safety standards (CS-129 manufacturer, CS-160 deployment).
StandardVersionApplicability
MediCore Data Security & Protection Toolkit2025/26All sections — security, IG, training, incident reporting
CS-129 Clinical Risk Management (Manufacturer)2018Security, Scenarios, Lifecycle — Hazard Log, clinical safety case
CS-160 Clinical Risk Management (Deployment)2018Lifecycle, Governance — deployment safety case
MediCore Authority Interoperability Standards2025Integration — FHIR R4, HL7v2 transition path
WCAG 2.2Level AAScenarios, Performance — accessibility
NCSC Cloud Security Principles14 principlesPhysical, Security
MediCore Authority Data Protection Impact Assessment Framework2024Data, Security
ISO/IEC 270182019Data, Security — Azure’s assurance for cloud PII

graph TD
  Patient[Patient - Web / iOS / Android] --> FD[Azure Front Door + WAF]
  Clinician[Service Desk Admin - MediCore CIS] --> FD
  FD --> APIM[Azure API Management]
  APIM --> BFF[Patient BFF]
  APIM --> AdminAPI[Admin API]
  BFF --> Apt[Appointments Service]
  BFF --> Results[Results Service]
  BFF --> Rx[Prescriptions Service]
  BFF --> Pref[Preferences Service]
  Apt --> SQL[Azure SQL - Portal DB]
  Results --> SQL
  Rx --> SQL
  Pref --> SQL
  Apt --> SB[Azure Service Bus]
  Results --> SB
  Rx --> SB
  SB --> Notif[Notification Service]
  Notif --> ACS[Azure Communication Services - SMS / Email]
  SB --> Audit[Audit Sink - ADLS Gen2]
  Apt --> FHIR[FHIR Facade]
  Results --> FHIR
  Rx --> FHIR
  FHIR --> EPR[Cerner EPR - HL7v2 / FHIR]
  FHIR --> Spine[MediCore Spine PDS / SCR]
  FHIR --> eRS[MediCore e-Referral]
  FHIR --> GPC[GP Connect - Appointments]
  FHIR --> Path[Pathology - WinPath]
  FHIR --> PACS[PACS - GE Centricity]
  BFF --> B2C[Azure AD B2C]
  AdminAPI --> CIS2[MediCore CIS]
ComponentTypeDescriptionTechnologyOwner
Web AppWeb ApplicationResponsive patient web front endReact 18 + TypeScript on Azure App Service (Linux) behind Front DoorDigital Product Team
iOS AppMobile ApplicationNative-feel hybrid iOS appIonic 8 + Capacitor 6 (Swift plugins for biometric unlock)Digital Product Team
Android AppMobile ApplicationNative-feel hybrid Android appIonic 8 + Capacitor 6 (Kotlin plugins for biometric unlock)Digital Product Team
Patient BFFAPI ServiceBackend-for-Frontend — aggregates downstream services for each patient session.NET 8 on Azure App Service (Linux, Premium v3)Digital Product Team
Admin APIAPI ServiceService desk administrative endpoints (read-only patient enrolment lookups, suspend account).NET 8 on Azure App ServiceDigital Product Team
Appointments ServiceAPI ServiceReads appointment lists, enables reschedule/cancel; integrates with EPR and e-RS.NET 8 on Azure App ServiceDigital Product Team
Results ServiceAPI ServiceReads pathology, radiology results released by clinical team; enforces results release rules.NET 8 on Azure App ServiceDigital Product Team
Prescriptions ServiceAPI ServiceDisplays active prescriptions and repeat request workflow.NET 8 on Azure App ServiceDigital Product Team
Preferences ServiceAPI ServicePatient contact preferences, consent, SMS opt-in, notification settings.NET 8 on Azure App ServiceDigital Product Team
FHIR FacadeBackend ServiceCanonical FHIR R4 adapter in front of EPR (HL7v2), Pathology, PACS, Spine, e-RS, GP Connect.NET 8 with Firely .NET SDK; HL7v2-to-FHIR mappingIntegration Team
Notification ServiceBackend ServiceConsumes Service Bus events; drives SMS/email via ACS with retry and delivery receipt tracking.NET 8 Azure Functions (Premium plan)Integration Team
Audit SinkBatch JobPersists structured audit events to immutable ADLS Gen2 (7-year retention) and forwards to SentinelAzure Functions + Azure Data Lake Storage Gen2Platform Team
Portal DBDatabasePatient preferences, consent, SMS opt-in, session and step-up MFA state, enrolment recordsAzure SQL Database (Business Critical, Zone Redundant)Platform Team
Azure Service BusMessage BrokerAsync events: appointment changes, new results available, prescription status, auditAzure Service Bus Premium (Zone Redundant)Platform Team
Azure API ManagementGatewayExternal API product (Front Door origin) and internal product for partner integrationAPIM Premium (UK South + UK West regions)Platform Team
Azure Front Door + WAFGateway / Load BalancerGlobal edge entry, TLS 1.3 termination, WAF (OWASP Core Rule Set 3.2), DDoS StandardAzure Front Door PremiumPlatform Team
Patient IdPGateway (identity)Azure AD B2C with custom policies; MFA (SMS OTP default, TOTP optional); step-up MFAAzure AD B2C (UK tenant)Security Team
Clinician IdPGateway (identity)MediCore CIS OIDC for staff service desk admin functionsMediCore CIS (external national service)Security Team
Service IDService NameCapability IDCapability Name
SVC-01Appointments ServiceCAP-APPTPatient Appointment Self-Service
SVC-02Results ServiceCAP-RSLTPatient Results Access
SVC-03Prescriptions ServiceCAP-PRXRepeat Prescription Request
SVC-04Preferences ServiceCAP-PREFPatient Contact Preferences
SVC-05FHIR FacadeCAP-INTClinical System Interoperability
SVC-06Notification ServiceCAP-NTFPatient Digital Notifications
Application NameApplication IDImpact TypeChange DetailsComments
Cerner Millennium EPRMHT-APP-0010UseConsume HL7v2 ADT/ORM/ORU feeds; consume Cerner FHIR R4 for patient and appointment read; no changes to EPR configurationRead-only from portal perspective
JAC PharmacyMHT-APP-0012UseConsume repeat prescription status; post request to JAC queueExisting HL7v2 interface extended
Clinisys WinPath (Pathology)MHT-APP-0045UseConsume ORU results messages via FHIR facadeExisting feed
GE Centricity (PACS)MHT-APP-0067UseConsume imaging availability metadata (report text; images not shown to patients in this phase)Phase 3 candidate for image thumbnails
Patient Knows Best (PKB)MHT-APP-0180DecommissionRetire after 3-month parallel run; contract ends 2026-Q3Migration of 40,000 PKB enrolled patients
Firetext SMSMHT-APP-0142DecommissionReplaced by Azure Communication Services
MediCore SpineExternalUsePDS for patient demographic verification; SCR not directly consumedVia national healthcare secure network
MediCore e-Referral ServiceExternalUseRead UBRN, appointment slots, worklists
GP Connect (Appointments)ExternalUsePhase 2 — read GP appointment availability for cross-care navigationLimited to appointment availability in this phase
Microsoft SentinelMHT-APP-0099UseReceive security eventsExisting SIEM
PatternWhere AppliedRationale
Backend-for-Frontend (BFF)Patient BFF aggregates downstream services for the web/mobile clientsLimits data exposure; reduces client chattiness over mobile networks; simplifies front-end security
API GatewayAzure API Management + Front DoorCentralised TLS termination, authentication enforcement, rate limiting, JWT validation, request shaping
FacadeFHIR Facade in front of legacy HL7v2 / proprietary interfacesPresents a single, standards-aligned (FHIR R4) contract to downstream services; isolates legacy change
Event-Driven (pub/sub)Service Bus topics for appointments, results, prescriptions, auditDecouples notifications and audit from the synchronous request path; absorbs downstream variability
Circuit BreakerFHIR Facade integration to EPR, Spine, GP ConnectPrevents cascade failure when downstream systems degrade (Polly library)
Retry with Exponential Back-offNotification Service (SMS delivery), FHIR Facade outbound callsTolerates transient failures, especially for critical SMS reminders
OutboxAppointments/Results/Prescriptions Services writing integration eventsEnsures at-least-once delivery of integration events alongside SQL transactions
Idempotent ConsumerNotification and audit consumersHandles duplicate delivery from Service Bus without double-notifying patients
Defence in DepthFront Door WAF, APIM policies, pod-level input validation, field-level encryptionUK GDPR Art 32 and NCSC Cloud Security Principle 4
Cache-AsideAppointments read caching (short TTL, 60s) via Azure Cache for RedisReduces load on EPR for heavy read scenarios

3.1.6 Technology & Vendor Lock-in Assessment

Section titled “3.1.6 Technology & Vendor Lock-in Assessment”
Component / ServiceVendor / TechnologyLock-in LevelMitigationPortability Notes
Azure App ServiceMicrosoft AzureModerateApps are standard .NET 8 containers; deployable to Kubernetes or any container hostContainer image portable (ACR to any registry)
Azure SQL DatabaseMicrosoft Azure (SQL Server)ModerateStandard T-SQL; no Always Encrypted-specific SKUs; bacpac exportPortable to managed SQL Server elsewhere
Azure API ManagementMicrosoft AzureModerateOpenAPI specs portable; policies XML-based (specific to APIM)Policies would need re-authoring for Kong/Apigee
Azure Front Door + WAFMicrosoft AzureModerateManaged service; DNS-based switchover possibleWAF ruleset would need re-authoring
Azure AD B2CMicrosoft AzureHighCustom policies deeply integratedExit to Keycloak/Auth0 would be substantial (6 months)
Azure Service BusMicrosoft AzureLowAMQP 1.0 standard; portable to RabbitMQ, ActiveMQ, ASB on-premLow effort
Azure FunctionsMicrosoft AzureModerateIsolated worker pattern portable as containers; HTTP triggers standardTimer triggers would need replacement
Azure Monitor / App InsightsMicrosoft AzureModerateOpenTelemetry used in services; dashboards Azure-specificTelemetry exportable
Microsoft SentinelMicrosoft AzureHighAnalytics rules Sentinel-specificHigh effort; mitigated by SIEM being a Trust-wide service
Azure Communication ServicesMicrosoft AzureModerateStandard SMS/email APIs; portable to GOV.UK Notify or TwilioProvider swap evaluated and tested as a fallback pattern (see 4.2.4)
Azure Data Lake Storage Gen2Microsoft AzureLowStandard HDFS-compatible object storagePortable to any S3/ADLS-compatible store
QuestionResponse
Caching to avoid recomputationYes — Azure Front Door + CDN cache static assets at the edge (~92% cache hit rate); Azure Cache for Redis (Premium) for session state, API response caching for the patient portal (TTL 60s for non-PII reference data). Spine demographic look-ups cached for the duration of a patient session.
Batch processes consolidated rather than continuously pollingYes — appointment reminder generation runs as nightly batch (00:30 UTC) rather than per-event; PDS demographic refresh runs weekly per cohort, not on every login; clinical-letter ingestion via webhook from EPR rather than polling.
Async / event-driven patterns to flatten peak loadYes — Service Bus + Azure Functions for SMS/email dispatch, EPR sync, audit log shipping. Consumer functions auto-scale on queue depth; capacity returns to zero at idle.
Heavy framework choices weighed against lighter alternativesConsidered — .NET 8 / ASP.NET Core retained for the patient portal API (existing Trust skill, AOT compilation reduces start time and memory). Azure Functions Isolated Worker selected over in-process; chosen for clearer dependency isolation and a smaller memory footprint per invocation.

graph LR
  Patient[Patient Device] -- TLS 1.3 --> FD[Front Door + WAF]
  FD --> APIM[APIM]
  APIM -- OAuth2 JWT --> BFF[Patient BFF]
  BFF --> Svc[Domain Services]
  Svc --> SQL[Azure SQL]
  Svc -- async --> SB[Service Bus]
  SB --> Notif[Notification Service]
  Notif --> ACS[ACS SMS / Email]
  Svc --> FHIR[FHIR Facade]
  FHIR -- HL7v2 over VPN --> EPR[Cerner EPR]
  FHIR -- TLS-MA over national healthcare secure network --> Spine[MediCore Spine]
  FHIR -- TLS over national healthcare secure network --> eRS[e-RS]
  FHIR -- TLS + MediCore CIS --> GPC[GP Connect]
  SB -- audit --> Audit[ADLS Gen2 Audit]
  Audit --> Sentinel[Microsoft Sentinel]
Source ComponentDestination ComponentProtocol / EncryptionAuthentication MethodPurpose
Web / Mobile AppAzure Front DoorHTTPS / TLS 1.3None (client)Patient entry point
Front DoorAzure API ManagementHTTPS / TLS 1.3 (Private Link)mTLS (Front Door-managed cert)Origin routing
API ManagementPatient BFFHTTPS / TLS 1.3 (VNet integration)Managed IdentityRoute BFF traffic
API ManagementAdmin APIHTTPS / TLS 1.3 (VNet integration)Managed IdentityRoute admin traffic
Patient BFFAppointments/Results/Prescriptions/Preferences ServicesHTTPS / TLS 1.3 (Private Endpoint)Managed Identity (AAD tokens)Service composition
Domain ServicesAzure SQLTDS / TLS 1.3 (Private Endpoint)Managed Identity (AAD)Portal data read/write
Domain ServicesAzure Service BusAMQP 1.0 / TLS 1.3 (Private Endpoint)Managed IdentityEvent publication
Notification ServiceService BusAMQP 1.0 / TLS 1.3Managed IdentityEvent consumption
Notification ServiceAzure Communication ServicesHTTPS / TLS 1.3Managed Identity (Entra ID)Send SMS / Email
Notification ServiceAzure Key VaultHTTPS / TLS 1.3 (Private Endpoint)Managed IdentityRetrieve ACS endpoint secrets / connection strings
Patient BFFAzure AD B2CHTTPS / TLS 1.3OIDC authorization code + PKCEPatient authentication / token exchange
Admin APIMediCore CISHTTPS / TLS 1.3OIDC authorization codeClinician authentication
FHIR FacadeAzure Cache for RedisTLS 1.3 (Private Endpoint)Managed IdentityShort-TTL read cache
Domain ServicesApp InsightsHTTPS / TLS 1.3Instrumentation key (Key Vault)Telemetry
Audit SinkADLS Gen2HTTPS / TLS 1.3 (Private Endpoint)Managed IdentityAppend audit blobs (immutable, WORM)
Audit SinkMicrosoft SentinelHTTPS / TLS 1.3Managed IdentityForward security events
Source ApplicationDestination ApplicationProtocol / EncryptionAuthenticationSecurity ProxyPurpose
Patient web/mobile appAzure Front DoorHTTPS / TLS 1.3Azure AD B2C JWT (per request)Front Door WAF, Azure DDoS StandardAll patient traffic
FHIR FacadeCerner Millennium HL7v2 listenerMLLP over IPsec VPNNetwork-layer auth + service accountTrust internal firewallHL7v2 ADT/ORM/ORU (legacy interfaces)
FHIR FacadeCerner Millennium FHIR R4HTTPS / TLS 1.3OAuth 2.0 client credentialsTrust internal firewallPatient/Appointment FHIR reads
FHIR FacadeMediCore Spine (PDS)HTTPS / TLS 1.2-MAMutual TLS with Spine certificateSpine Core via national healthcare secure networkPatient demographic lookups
FHIR FacadeMediCore e-Referral ServiceHTTPS / TLS 1.2OAuth 2.0 + MediCore Digital assurance keynational healthcare secure networkOutpatient referral reads
FHIR FacadeGP Connect (Appointments)HTTPS / TLS 1.2JWT + MediCore CIS organisation certificatenational healthcare secure networkCross-organisation appointment availability (Phase 2)
Notification ServiceAzure Communication Services (SMS / Email)HTTPS / TLS 1.3Managed IdentityPrivate EndpointAppointment reminders, OTP delivery, notifications
Service Desk ClinicianAdmin Portal (Admin API)HTTPS / TLS 1.3MediCore CIS OIDC + MFA (smart card or FIDO2)Front Door WAFRead-only enrolment lookups, account suspension
Microsoft SentinelAzure AD B2C / App Insights / ADLS Gen2Azure diagnostic settingsManaged IdentityAzure-internalSecurity analytics and alerting
Patient web/mobile appMicrosoft Intune (for MDM-managed Trust devices only)HTTPS / TLS 1.3Intune-managedN/AManaged device posture (corporate-issued devices only)
User TypeAccess MethodAuthenticationProtocol
Patient (web)Responsive web appAzure AD B2C (OIDC) + MFA (SMS OTP default / TOTP)HTTPS / TLS 1.3
Patient (mobile)iOS / Android appAzure AD B2C (OIDC, refresh token rotation) + biometric unlockHTTPS / TLS 1.3
Service desk admin (clinician)Admin portal (responsive web)MediCore CIS (OIDC) + smart card or FIDO2HTTPS / TLS 1.3
Operations / SREAzure Portal + BastionEntra ID SSO + conditional access + PAM (Just-in-Time elevation)HTTPS / TLS 1.3, SSH over Bastion
API / InterfaceTypeDirectionFormatVersionDocumentation
MyMedwick Patient APIREST (FHIR-aligned where applicable)ExposedJSONv1.2Internal developer portal (APIM)
MyMedwick Admin APIRESTExposedJSONv1.0Internal developer portal
Cerner Millennium FHIR R4REST (FHIR R4)ConsumedJSON (FHIR)R4Cerner vendor docs
Cerner Millennium HL7v2MLLPConsumedHL7v2.5 pipe-delimited2.5Trust integration wiki
MediCore Spine PDSREST / SOAPConsumedXML / JSON3.0MediCore Digital developer portal
MediCore e-Referral ServiceRESTConsumedJSON (FHIR R4)v2MediCore Digital developer portal
GP Connect AppointmentsREST (FHIR STU3)ConsumedJSON (FHIR STU3)STU3 v1.4MediCore Digital developer portal
WinPath PathologyHL7v2 / MLLPConsumedHL7v2.52.5Clinisys docs
Azure Communication ServicesRESTConsumedJSON2023-08Microsoft docs
MediCore CIS OIDCREST (OIDC)ConsumedJSONOIDC 1.0MediCore Digital developer portal

graph TD
  DNS[Trust DNS] --> FD[Azure Front Door Premium + WAF]
  FD --> APIM1[APIM - UK South]
  FD --> APIM2[APIM - UK West DR]
  subgraph UKS[Azure UK South - Primary]
      APIM1 --> AppSvc[App Service Environment v3]
      AppSvc --> SQL1[Azure SQL BC Zone Redundant]
      AppSvc --> SB1[Service Bus Premium ZR]
      AppSvc --> Redis1[Azure Cache for Redis Premium]
      AppSvc --> KV1[Key Vault - UK South]
      AppSvc --> ADLS1[ADLS Gen2 - UK South]
      AppSvc --> PE[Private Endpoints]
      AppSvc --> B2C[Azure AD B2C UK Tenant]
  end
  subgraph UKW[Azure UK West - DR]
      APIM2 --> AppSvc2[App Service - Warm Standby]
      AppSvc2 --> SQL2[Azure SQL - Failover Group]
      AppSvc2 --> SB2[Service Bus - Geo-DR]
      AppSvc2 --> KV2[Key Vault - UK West]
  end
  SQL1 -- Auto Failover Group --> SQL2
  SB1 -- Geo-DR Pairing --> SB2
  ADLS1 -- GRS / RA-GRS --> ADLS2[ADLS Gen2 - UK West]
  AppSvc -. HL7v2 over IPsec VPN .-> EPR[Cerner EPR - Trust Data Centre]
  AppSvc -. TLS-MA over national healthcare secure network .-> national healthcare secure network[National Healthcare Secure Network]
  national healthcare secure network --> Spine[MediCore Spine]
  national healthcare secure network --> eRS[MediCore e-Referral]
AttributeSelection
Hosting Venue TypePublic cloud (Azure) with national healthcare secure network connectivity to MediCore national services
Hosting Region(s)UK South (primary — London), UK West (DR — Cardiff)
Service ModelPaaS (App Service, Azure SQL, Service Bus, APIM, Functions) and SaaS (Azure Communication Services, Front Door, Sentinel)
Cloud ProviderMicrosoft Azure
Account / Subscription TypeMedwick Healthcare Trust Enterprise Agreement — dedicated “mymedwick-prod” subscription; separate subscriptions per environment
Landing Zone PatternMedwick ALZ (Azure Landing Zone) — MediCore Authority-aligned, hub-and-spoke with platform hub (shared connectivity, shared services) and workload spoke
Data residencyAll data (primary, DR, backups, logs) in UK regions only — UK South and UK West. Enforced by Azure Policy “Allowed Locations”.
AttributeDetail
Compute TypePaaS — Azure App Service (Linux, Premium v3) and Azure Functions (Premium plan)
App Service PlanP2v3 (2 vCPU, 8 GB RAM) per service, 2 instances (scale-out to 10 via autoscale) in Production
Functions PlanPremium EP2 for Notification Service and Audit Sink
Runtime.NET 8 (LTS)
Web Application HostingAzure App Service (Linux) with per-service slots for blue/green deployment
Mobile BuildIonic + Capacitor; iOS signed via Apple Developer Enterprise account; Android signed via Google Play console
IsolationDedicated App Service Environment v3 (ASEv3) for all production services; VNet-integrated; zone redundant
  • Microsoft Defender for Cloud — enabled across the subscription (Defender for App Service, SQL, Storage, Key Vault, Containers)
  • Microsoft Defender for Endpoint — on all admin jump boxes (via Intune)
  • Microsoft Sentinel — SIEM / SOAR
  • Azure Policy — enforces NCSC / MediCore / Medwick baselines
  • Microsoft Purview — data classification and sensitivity labels on Azure SQL
  • Vulnerability scanning (Defender for Cloud built-in + OWASP ZAP in CI)
QuestionResponse
Is this an Internet-facing application?Yes — Front Door is the only public entry point; APIM is not public (Private Link only)
Outbound Internet connectivity required?Limited — only via Private Endpoints and Azure-managed egress. Outbound to ACS, B2C, Apple/Google push services via Managed Firewall allow-list
Cloud-to-on-premises connectivity required?Yes — IPsec VPN + ExpressRoute (1 Gbps) to Trust core data centre for Cerner EPR HL7v2 and ancillary systems
Wireless networking required?No (within Azure); Trust-site wireless is used by Trust devices and is out of scope here
Third-party / co-location connectivity required?No — all MediCore national services via national healthcare secure network; no private co-location links
national healthcare secure network connectivity required?Yes — dedicated national healthcare secure network CN-SP link for MediCore Spine, e-Referral Service, and GP Connect
AttributeSelection
User access methodWeb (HTTPS), mobile app (HTTPS)
User locationsPatients — Internet, primarily UK, occasional overseas
Administrator access methodAzure Bastion for VM/jump-box access (rare); Azure Portal via Entra ID + MFA + conditional access + PIM for privileged roles
VPN requiredNo for patients; administrators use conditional access (no VPN)
ExpressRoute / VPNYes — ExpressRoute (UK South) + IPsec VPN backup to Trust on-premises for EPR
ProtocolUsed?Purpose
HTTPS (TLS 1.2+)YesAll patient, clinician, and service traffic — TLS 1.3 enforced where possible, TLS 1.2 minimum
MLLP over IPsecYesHL7v2 from Cerner EPR (legacy, encrypted over private VPN)
AMQP 1.0YesAzure Service Bus
SFTPNoN/A
TCP (other)YesRedis protocol (6380, TLS) within VNet
WebSocketNoN/A
MetricValue
Peak egress bandwidth to Internet400 Mb/s (projected Year 3)
Peak ingress bandwidth from Internet150 Mb/s
Peak bandwidth between on-prem and cloud (EPR)250 Mb/s (over 1 Gbps ExpressRoute)
Peak national healthcare secure network bandwidth50 Mb/s (Spine, e-RS, GP Connect combined)
Traffic characteristicsDaily peaks 07:30-09:00 (appointment reminder windows) and 18:00-20:00 (after-work access); weekend slow
Latency requirementsPatient-perceived TTFB < 300ms P95
ControlImplementedDetail
DDoS ProtectionYesAzure DDoS Standard on the VNet; Front Door absorbs volumetric attacks at edge
Rate LimitingYesAPIM rate limit policies (per subscription key and per user); Front Door WAF rate-based rules
Source IP RestrictionsYesAdmin portal: geo-blocked outside UK + allow-list for Trust IPs; patient portal: no IP restriction (open)
Web Application Firewall (WAF)YesFront Door Premium WAF with OWASP Core Rule Set 3.2, bot manager, custom rules (National Patient ID format, block common path traversal)
Client Verification ControlsYesPatient JWTs from Azure AD B2C bound to session, short-lived (30 min access token, 8h refresh with rotation)
File Upload ProtectionLimitedOnly repeat prescription note field accepts text (no file upload)
EnvironmentDescriptionCount & VenueCompute Solution
DevelopmentIndividual developer environments using shared dev subscription1 x Azure UK SouthApp Service Basic tier, Azure SQL General Purpose (small)
Test / QAAutomated integration and regression testing1 x Azure UK SouthApp Service Standard S2, SQL GP, synthetic data only
Staging / Pre-ProductionProduction-mirror for UAT, clinical safety testing, accessibility testing1 x Azure UK SouthApp Service P1v3, SQL Business Critical (smaller), masked production-like data
TrainingClinical training environment for service desk staff1 x Azure UK SouthShared with Staging compute, separate SQL (synthetic)
ProductionLive service1 x Azure UK South (3 zones), DR in UK WestASEv3, App Service P2v3, SQL BC Zone Redundant, Service Bus Premium
DRWarm standby1 x Azure UK WestApp Service P1v3 (scaled up during failover), SQL Auto-Failover Group secondary
  • No — production and non-production environments live in separate Azure subscriptions with no VNet peering. Promotion is via Azure DevOps pipelines only. Production data is never copied to non-production; masked synthetic data is used.

Patients use their own devices (BYOD). Minimum supported platforms:

  • Web: last two major versions of Chrome, Edge, Safari, Firefox; WCAG 2.2 AA conformance
  • iOS: 16.0+ (aligned with Apple support lifecycle)
  • Android: 11.0+ (API level 30)

Trust service desk staff use Intune-managed Windows laptops for administrative functions.

Not applicable — no IoT devices are part of this solution. Trust Internet-of-Things programmes (e.g., remote vital signs monitoring) are separate initiatives.

QuestionResponse
Hosting region chosen for low carbon intensityAzure UK South (London) primary and UK West (Cardiff) DR — chosen for data residency and MediCore DSPT requirements. Microsoft has committed to 100% renewable energy matching across UK regions by 2025. UK West’s published grid mix is on average cleaner than UK South.
Non-production environments auto-shutdownYes — non-prod App Service plans scaled-in 19:00-07:00 weekdays + weekends via Azure Automation; non-prod Azure SQL auto-paused after 1 hour idle. Estimated saving £800/month (referenced in 4.5).
Compute family chosen for performance-per-wattYes — Premium v3 (Pv3) App Service plan SKUs throughout; Microsoft published data shows ~25% better performance-per-watt than Pv2 with faster warm-up. ADLS Gen2 uses latest-generation Microsoft hardware.
Auto-scaling configured to release capacity when idleYes — App Service Plan auto-scale: scale-out at >70% CPU 10 min, scale-in at <30% CPU 20 min. Azure Functions consumption plan scales to zero between bursts.
DR strategy proportionate to recovery objectiveActive-passive (warm) with Azure SQL geo-replica + ADLS Gen2 RA-GRS + App Service in UK West deployed via IaC on failover. RTO 4 hours, RPO 15 minutes meets clinical-safety RTO. Hot active-active rejected: would have doubled compute footprint without RTO benefit beyond what’s clinically required.

Data NameStore TechnologyAuthoritative?Retention PeriodData SizeClassificationPersonal Data?Special Category?Encryption LevelKey Management
Patient enrolment records (National Patient ID, portal user ID mapping, verification evidence references)Azure SQLYesLife + 8 years (Records Management Code of Practice)5 GBRestrictedYesYes (health status inferred)TDE + Always Encrypted (deterministic on National Patient ID)Customer-managed key (HSM-backed)
Patient preferences (contact, consent, SMS opt-in)Azure SQLYesLife + 8 years1 GBRestrictedYesPartialTDE + Always EncryptedCustomer-managed key
Appointment cache (read-through cache from EPR)Azure SQL + RedisNo (EPR authoritative)30 days rolling20 GBRestrictedYesYesTDE (SQL); in-memory TLS (Redis)Customer-managed key
Results metadata (result ID, released flag, view timestamps)Azure SQLYes (for view tracking); No (result content in EPR)8 years15 GBRestrictedYesYesTDE + Always EncryptedCustomer-managed key
Session state / MFA stateAzure SQLYes24 hoursless than 1 GBRestrictedYesNoTDECustomer-managed key
Audit logADLS Gen2 (WORM immutable)Yes7 years (DSPT / MediCore Records Management)150 GB / yearRestrictedYesYesAzure Storage SSE + immutable blob policyCustomer-managed key
Application logs (PII-redacted)Log Analytics (Sentinel workspace)No2 years (hot) + 5 years (archive)80 GB / yearInternalNo (redaction enforced)NoAzure Storage SSEMicrosoft-managed
Integration event store (Service Bus messages)Azure Service BusTransient14 days maxless than 10 GBRestrictedYesYesService Bus encryption (TLS + at-rest)Customer-managed key
AttributeDetail
Storage ProductAzure SQL Database (Business Critical, Zone Redundant), Azure Data Lake Storage Gen2, Azure Cache for Redis (Premium)
Storage SizeSQL: 500 GB provisioned (Business Critical); ADLS Gen2: estimated 1.5 TB over 7 years; Redis: 6 GB
ReplicationSQL: zone-redundant + geo-failover group to UK West; ADLS: RA-GRS to UK West; Redis: not replicated (cache only)
Minimum RPO5 minutes (SQL geo-failover group asynchronous)
Classification LevelData TypesHandling Requirements
PublicPublic-facing documentation, accessibility statementOpen access
InternalRedacted application logs, infrastructure metrics, aggregated usage statisticsTrust access controls
Restricted (Official-Sensitive)All patient-identifiable data, enrolment records, preferences, audit logs referencing patients, clinical messagesEncrypted at rest (TDE + Always Encrypted for PII fields) and in transit (TLS 1.3); access-controlled (RBAC + PIM); audited; 7-year audit retention

MediCore healthcare data classification: All patient-identifiable data is “Official-Sensitive” with the MediCore handling caveat “PERSONAL”. The Caldicott Principles are applied to every data use.

StageDescriptionControls
Creation / IngestionPatient enrolment (self-service with National Patient ID + PDS verification); clinical data read-through from EPR via FHIR facade; no primary clinical data created in portalPDS demographics match; National Patient ID validation (Modulus 11); consent captured and logged
ProcessingDomain services resolve each request against EPR / Spine in real time, applying results release rules and consent checksEvery patient data access logged with National Patient ID, user session, and purpose; Caldicott justification coded per access type
StoragePortal-owned data in Azure SQL (TDE + Always Encrypted); immutable audit logs in ADLS Gen2Customer-managed keys in Azure Key Vault (HSM); automated daily backups; geo-redundant for audit
Sharing / TransferTo MediCore Spine (TLS-MA), to e-RS, to GP Connect (Phase 2), to ACS (patient contact details for SMS/email delivery only); no third-country transferData minimisation — only send what is required; DPIA DPIA-2025-004 assesses each flow
ArchivalAudit log transitions from hot (1 year) to cool (years 2-7) in ADLS lifecycle policy; SQL archival is application-level (mark as archived)Lifecycle policies, WORM immutability on audit container (7-year legal hold)
Deletion / PurgingOn patient request (UK GDPR Art 17 with MediCore records caveats) or at end of retention; pseudo-anonymised research aggregates may be retainedData Retention Committee approves; tombstone records preserved for audit trail integrity
Assessment TypeIDStatusLink
DPIADPIA-2025-004Completed, approved by DPO (Sally Bloggs) and Caldicott Guardian (Helen Bloggs)Trust IG Library: /ig/dpia-2025-004
DPIA — GP Connect extension (Phase 2)DPIA-2025-018CompletedTrust IG Library: /ig/dpia-2025-018
Transfer Risk AssessmentN/ANo data transferred outside UK
ApproachSelected
Sensitive data is masked (describe method below)[x]

Production data is never copied into non-production environments. Staging uses a masked dataset derived from EPR test data where all National Patient IDs, names, addresses, dates of birth, and contact details are replaced by realistic synthetic values using a deterministic tokenisation approach. Referential integrity (appointment-to-patient, result-to-patient) is preserved using the tokens. Approved by IG Lead (2025-04-08).

  • Yes — structural integrity enforced via Azure SQL constraints; clinical data integrity enforced by reading through to the EPR (the authoritative source) for any decision-relevant values; hash verification on audit log blobs (ADLS append-blob with content MD5).
  • Patient identity integrity is an explicit Hazard Log hazard (HAZ-04 — see 3.6) and is mitigated by PDS demographic verification on every enrolment and on any change to patient demographics.
  • Minimal — no clinical data stored on patient devices. Mobile apps persist an encrypted refresh token in device secure storage (iOS Keychain / Android Keystore). Biometric unlock gates access. Apps enforce no-screenshot on sensitive screens (iOS only; Android best-effort via FLAG_SECURE).
DestinationData TypeClassificationTransfer MethodProtection
MediCore Spine (PDS)National Patient ID, demographic queryRestrictedTLS-MA over national healthcare secure networkMutual TLS with Spine-issued certificate; minimum data for lookup
MediCore e-Referral ServicePatient UBRN, appointment referencesRestrictedHTTPS over national healthcare secure networkOAuth 2.0; MediCore Digital assurance key
GP ConnectPatient National Patient ID for appointment availability (Phase 2)RestrictedHTTPS over national healthcare secure networkJWT + CIS2 organisation certificate
Microsoft Azure Communication Services (subprocessor)Patient mobile number / email (ephemeral at time of send)RestrictedHTTPS / TLS 1.3Microsoft is contracted subprocessor under Trust enterprise agreement; UK region only; subject to Microsoft Online Services DPA
Microsoft Sentinel (Trust internal SIEM)Pseudonymised security eventsInternalAzure diagnostic settingsInternal Trust service
  • Yes — all customer data (PII and clinical data) remains within the United Kingdom. Primary in UK South (London); DR in UK West (Cardiff). Azure Policy “Allowed Locations” rejects any resource deployment outside UK. ACS SMS / email uses UK region endpoints. The Microsoft Online Services DPA, combined with Microsoft’s UK data residency commitments for ACS and Azure SQL, is assessed as adequate for UK GDPR purposes. Any future third-country transfer would require a Transfer Risk Assessment (TRA) and Standard Contractual Clauses.
QuestionResponse
Retention periods minimised to regulator + business needYes — patient identifiable data retained per MediCore Records Management Code 2021 (ranges 8 years for adult outpatient records to lifetime+8 for some categories); audit logs 25 years (MediCore DSPT requirement); session data ≤ 24 hours. ADLS Gen2 lifecycle policies enforce automatic expiry; no “indefinite” retention.
Older data tiered to cold/archive storageYes — ADLS Gen2 lifecycle: Hot for current year, Cool for years 2-3, Archive for years 4+. Azure SQL longer-term retention (LTR) backups stored in cool tier. ~70% of historical data in Cool/Archive.
Unused or duplicate replicasSingle Azure SQL primary + 1 DR geo-replica; no read replicas (the application is light-read for individual patients). Quarterly review of storage accounts via Azure Advisor recommendations.
Compression appliedBrotli on HTTPS responses (~70% reduction on FHIR JSON payloads); gzip on audit log uploads to ADLS; FHIR resources are stored compressed in cold tiers.
Cross-region replication justifiedAzure SQL geo-replica required by clinical-safety RTO. ADLS GRS chosen over LRS specifically to support DR; LRS would not have met the RPO. No cross-region replication outside UK regions.
Large data transfers off-peakNightly EPR ingest 02:00-04:00 UTC; weekly Spine batch reconciliation Saturday 03:00 UTC. Both align with low UK grid carbon intensity.

QuestionResponse
Does the solution support regulated activities?Yes — processes special category personal data (health). Subject to CS-129/0160 clinical safety standards. Not a medical device (assessed).
Is the solution SaaS or third-party hosted?No — hosted on Azure (IaaS/PaaS) by the Trust; Microsoft is the cloud provider (subprocessor)
Has a third-party risk assessment been completed?Yes — Microsoft Azure: MHT-TRA-2024-001 (approved); Cerner (EPR vendor): MHT-TRA-2023-007 (approved); ACS: inherits Microsoft TRA
Impact CategoryBusiness Impact if Compromised
ConfidentialityCritical — exposure of patient records would breach UK GDPR, require ICO notification within 72 hours, and cause lasting loss of patient trust; potential fines up to 4% of Trust turnover
IntegrityCritical — incorrect display of results or appointments could contribute to patient harm (missed appointment, acting on wrong result) — see Hazard Log HAZ-02, HAZ-03, HAZ-04
AvailabilityHigh — extended outage would increase booking office load ~3.5x and may delay access to clinical information; not life-critical because EPR and clinical services remain available
Non-RepudiationHigh — inability to prove a patient’s consent or a specific action (cancellation, prescription request) would undermine clinical and legal accountability

A STRIDE-based threat model was conducted (MHT-TM-2025-008). Healthcare-specific threats are highlighted.

STRIDEThreatAttack VectorLikelihoodImpactMitigation
SpoofingAttacker impersonates patient to view recordsCredential stuffing from other-site breaches; SIM-swap to intercept SMS OTPMediumCriticalAzure AD B2C + MFA (SMS OTP default; TOTP upgrade recommended); breached-password detection; step-up MFA for prescription actions; FIDO2 option
SpoofingAttacker impersonates Trust clinician to service desk admin portalStolen smart card / coerced clinicianLowCriticalMediCore CIS smart card + FIDO2; IP geo-restriction; session recording; behavioural analytics (Sentinel)
TamperingMan-in-the-middle alters appointment details in transitTLS downgradeLowHighTLS 1.3 enforced; HSTS + preload; certificate pinning on mobile apps
TamperingModification of audit logInsider with storage accessLowCriticalADLS Gen2 WORM immutable policy (7-year legal hold); Key Vault access separated from audit writers; alerted on access
RepudiationPatient denies an action (cancellation, Rx request)Session hijack or disputeMediumHighImmutable audit trail including device, IP, session ID, MFA method; step-up MFA for sensitive actions
Information DisclosureData breach exposing patient recordsSQL injection, misconfigured storage, stolen credentialsLowCriticalParameterised queries; Defender for SQL; Private Endpoints only; Always Encrypted on PII; Sentinel UEBA
Information DisclosureWrong patient’s record shown to another patient (misidentification) — clinical safety hazard HAZ-04Logic bug in session/context handling; identity merge errorLowCriticalStrict session-to-MediCore-Number binding; automated clinical safety regression tests; manual clinical safety review per release (CS-160)
Denial of ServiceVolumetric DDoS on public endpointBotnet attackMediumHighAzure DDoS Standard; Front Door absorbs edge; APIM rate limiting; graceful degradation
Elevation of PrivilegeStandard user escalates to adminBroken access controlLowCriticalRBAC + ABAC (patient can only see own National Patient ID data, enforced at service layer and re-validated in FHIR facade); pen testing annually (NCC Group)
Clinical safety (cross-cutting)Silent SMS delivery failure causing missed critical appointment — hazard HAZ-02ACS outage, mobile number out of dateMediumHighDelivery receipts tracked; fallback to email; booking office manual check for high-priority appointments; patient UI shows “last notified” timestamp
Clinical safety (cross-cutting)Wrong results shown to patient — hazard HAZ-03EPR interface defect, mapping errorLowCriticalResults release only after clinician review and explicit release; FHIR conformance tests; contract tests; sample reconciliation with EPR nightly
Access TypeRole(s)Destination(s)Authentication MethodCredential Protection
Patient (web / mobile)PatientMyMedwickAzure AD B2C (custom policy) — username / password + MFA (SMS OTP default; TOTP or FIDO2 optional)B2C password policies: 12 char min, complexity, breached-password check via Have-I-Been-Pwned-style service; PBKDF2 storage
Access TypeRole(s)Destination(s)Authentication MethodCredential Protection
Service desk admin (clinician / admin)Service Desk Admin, Read-Only AdminAdmin portalMediCore CIS OIDC — smart card or FIDO2 (phishing-resistant)CIS2-managed; Trust enforces smart card for clinical users
Operations / SREPlatform Engineer, DBA, Security EngineerAzure Portal, ADO, runbooksEntra ID SSO + MFA (FIDO2 / Microsoft Authenticator) + Conditional Access + PIM (JIT)Entra ID policies; PIM 8-hour max elevation
Service accountsInternal servicesAzure resourcesAzure Managed Identity (system-assigned or user-assigned)No passwords; tokens short-lived and Entra-managed
ControlResponse
Does the application use SSO?Yes — Azure AD B2C for patients; MediCore CIS for clinicians; Entra ID for staff/ops
What is the unique identifier for user accounts?Patients: Azure AD B2C user objectId mapped to National Patient ID (verified via PDS during enrolment); clinicians: CIS2 UUID
What is the authentication flow?Authorization code + PKCE for all web/mobile; token exchange at BFF
Credential issuancePatient: self-service enrolment with PDS demographic match + email verification + SMS verification; service desk admin: CIS2 smart card issued by MediCore Registration Authority
Credential complexityPatient: 12+ chars with complexity, breached-password check; clinician: CIS2 policy
Credential rotationPatient: 180-day password rotation recommended (not enforced — aligned to NCSC guidance); CIS2: MediCore CIS policy
Account lockoutPatient: 5 failed attempts -> 15 minute soft lockout; 10 attempts -> account locked, manual unlock via service desk after verification
Password resetPatient: self-service with registered email + SMS OTP verification of National Patient ID + date of birth
ControlResponse
Session establishmentOIDC session cookie (HttpOnly, Secure, SameSite=Strict); access token 30 min; refresh token 8 hours (rotation on use)
Mobile sessionsRefresh token in iOS Keychain / Android Keystore with biometric unlock; device posture check on Trust-managed service desk devices
Session protectionJWTs signed (RS256); audience-bound to MyMedwick BFF; token binding to session; nonce and state on authorization code flow
Session timeout / concurrency30 min idle timeout (patient); 15 min (admin); no concurrency limit for patients, single-session for admin
Access TypeRole / ScopeEntitlement StoreProvisioning Process
PatientsFine-grained access bound to own National Patient ID onlyAzure SQL (enrolment table)Self-service enrolment + PDS verification
Service desk adminAdmin Read-Only, Account SuspendMediCore CIS attributes + Trust role mappingVia Trust RA process
Operations / SREPlatform Operator, DBA, SecurityEntra ID groups + PIMManager approval + PIM JIT elevation
Service accountsPer-service Managed Identity (least privilege)Azure RBACIaC-managed (Bicep)
ControlResponse
Account re-certificationQuarterly for admin roles; annual for patient accounts (dormant > 18 months auto-suspended)
Segregation of dutiesDevelopers cannot deploy to production (pipeline enforced); admins cannot modify clinical data in EPR from portal; ops cannot read patient clinical data (access to PII columns via Always Encrypted requires explicit Key Vault grant with break-glass logging)
Delegated authorisationProxy access (e.g., parent for child aged under 13) is NOT supported in v2.0 — documented limitation; planned for v3.0 subject to IG assurance
Account TypeManagement Approach
OS privileged accountsPaaS — no OS access for dev/ops; Azure Bastion + PIM for any VM access (jump boxes rare)
Infrastructure adminEntra ID + PIM JIT (8-hour max); all actions logged in Entra ID Audit and Sentinel
SQL administrationDBA role via PIM; SQL ledger enabled; SQL Audit logs to Log Analytics
Break-glassTwo named emergency accounts stored in physical safe (CISO + CDIO); usage triggers high-priority Sentinel alert

3.5.3 Network Security & Perimeter Protection

Section titled “3.5.3 Network Security & Perimeter Protection”
ControlImplementation
Network segmentationAzure Landing Zone hub-spoke; VNet per environment; subnets per tier (app, data, management); NSGs with deny-by-default; Azure Firewall at hub; Private Endpoints for all PaaS; no public network access to SQL, Key Vault, Storage, Service Bus
Ingress filteringAzure Front Door Premium with WAF (OWASP CRS 3.2 + Microsoft managed rulesets), bot protection, rate-based rules, geo-rules; APIM policies (JWT validation, schema validation, rate limit)
Egress filteringAzure Firewall; explicit allow-list (ACS, Microsoft Graph, Spine/national healthcare secure network targets, Apple/Google push); deny-all-else; NAT Gateway with fixed egress IPs
Encryption in transitTLS 1.3 enforced for all external; TLS 1.2 minimum internally; private CA for service-to-service mTLS optional; Azure Key Vault + Managed HSM for certificate management
national healthcare secure network boundaryDedicated national healthcare secure network CN-SP connection (2 links, diverse carriers) with MediCore-approved firewalling
AttributeDetail
Encryption deployment levelStorage (all data stores) + Application (Always Encrypted on PII columns in Azure SQL)
Key typeSymmetric (AES-256)
Algorithm / cipher / key lengthAES-256-GCM (Always Encrypted column enclave); AES-256 (TDE, Storage SSE, Service Bus)
Key generationAzure Key Vault Managed HSM (FIPS 140-2 Level 3)
Key storageAzure Key Vault Managed HSM (customer-managed keys); separate key per environment and per data class
Key rotation scheduleAnnual automatic rotation for TDE CMKs; 180-day rotation for Always Encrypted column master keys; rotation orchestrated by IaC + Key Vault rotation policies
AttributeDetail
Secret storeAzure Key Vault (Premium, HSM-backed) + Managed HSM for CMKs
Secret distributionRuntime retrieval via Managed Identity + Key Vault references; never written to disk or config files
Secret protection on hostMemory only; Key Vault access logged; Private Endpoint for Key Vault
Secret rotationAutomatic via Key Vault rotation policies (connection strings, APIM subscription keys, ACS access keys); certificate lifecycle managed by Key Vault + Azure Front Door

3.5.5 Security Monitoring & Threat Detection

Section titled “3.5.5 Security Monitoring & Threat Detection”
CapabilityImplementation
Security event loggingAll authn/authz events, patient data access (with National Patient ID, action, result), admin actions, privilege elevation, WAF blocks, configuration changes. Forwarded to Sentinel.
SIEM integrationMicrosoft Sentinel (Trust tenant) — all Azure diagnostic logs + App Insights security events. Custom analytics rules: patient-credential-stuffing (failed MFA > 10 in 15 min across unique patient IDs from one IP), impossible travel, admin after-hours access, mass-export pattern, prescription request anomaly
Infrastructure event detectionMicrosoft Defender for Cloud (Defender for App Service, SQL, Storage, Key Vault, Containers); Microsoft Defender for Identity on Entra ID
Security alertingSentinel playbooks (SOAR): automatic account lockout on credential stuffing pattern, Teams notification to SOC, ServiceNow ticket creation; 24x7 SOC (outsourced to Trust MSSP)
Threat intelligenceMISP feed, MediCore Digital Data Security Centre (DSC) alerts ingested into Sentinel
Clinical safety monitoringDedicated Sentinel workbook with clinical-safety-relevant KPIs: SMS delivery failure rate, FHIR facade error rate against EPR, session-to-MediCore-Number binding anomaly count

UC-01: Patient views upcoming appointments

AttributeDetail
Actor(s)Enrolled patient
TriggerPatient opens app and navigates to “My Appointments”
Pre-conditionsPatient is enrolled, authenticated (Azure AD B2C session valid), has given consent to SMS/email communications, has at least one scheduled outpatient appointment
Main Flow1. App calls GET /appointments on Patient BFF with Bearer JWT. 2. BFF validates token (JWT signature, audience, not expired). 3. BFF calls Appointments Service with patient context (National Patient ID from session). 4. Appointments Service checks Redis cache (60s TTL) for patient appointments. 5. Cache miss: Appointments Service calls FHIR Facade. 6. FHIR Facade calls Cerner FHIR R4 Appointment search by patient identifier. 7. FHIR Facade normalises to MyMedwick canonical model. 8. Appointments Service filters to outpatient-type only and applies results release rules. 9. Appointments Service caches and returns response. 10. BFF aggregates and returns to app. 11. Audit event emitted to Service Bus.
Post-conditionsPatient sees list of appointments; audit event recorded with National Patient ID, session ID, timestamp, purpose=view-appointments
Views InvolvedLogical, Integration & Data Flow, Physical (App Service, SQL, Redis, ExpressRoute to EPR), Data (cache, audit), Security (JWT, RBAC, audit)

UC-02: Patient cancels or reschedules an appointment

AttributeDetail
Actor(s)Enrolled patient
TriggerPatient selects “Cancel” or “Reschedule” on an appointment
Pre-conditionsUC-01 pre-conditions; appointment is within the 24-hour-plus-before cut-off; the appointment type permits self-service (some oncology appointments are flagged “clinician-managed only”)
Main Flow1. App calls POST /appointments/{id}/cancel with reason. 2. BFF validates JWT and business rules (cut-off, type). 3. Appointments Service writes intent (status=cancel-requested) to SQL and emits event to Service Bus (Outbox pattern). 4. FHIR Facade consumes event and issues Appointment.status=cancelled to Cerner via FHIR R4. 5. Cerner acknowledges; FHIR Facade records success. 6. Notification event emitted. Notification Service sends SMS + in-app notification: “Your appointment on DATE has been cancelled.” 7. Booking office worklist updated (Cerner handles downstream).
Post-conditionsAppointment cancelled in EPR; patient notified; immutable audit event recorded
Views InvolvedLogical, Integration & Data Flow, Security (authentication, step-up MFA not required for cancel; required for repeat Rx), Scenarios, Reliability (Outbox ensures durability)

UC-03: Appointment reminder SMS — with delivery failure handling

AttributeDetail
Actor(s)Notification Service, Azure Communication Services, Patient
Trigger48-hour-pre-appointment scheduler job runs
Pre-conditionsPatient has an active appointment; patient has opted in to SMS reminders; mobile number verified at enrolment
Main Flow1. Scheduler publishes “send-reminder” event for each qualifying appointment. 2. Notification Service retrieves patient’s preferences. 3. Notification Service calls ACS SMS with message. 4. ACS returns delivery status within 60 seconds (typical). 5. If delivered: audit success. 6. If failed / undelivered: Notification Service schedules retry after 15 min (max 3 retries with exponential back-off). 7. If all retries fail OR patient has no valid mobile: fall back to email. 8. If email also fails OR patient has no valid email: add to booking office exception worklist for manual follow-up call (hazard mitigation for HAZ-02). 9. Patient app shows “reminder sent at TIME” on the appointment card for transparency.
Post-conditionsPatient reminded via one or more channels OR appointment added to manual-call worklist; audit trail complete
Views InvolvedLogical (Notification Service), Integration (ACS), Reliability (retry, fallback, manual exception), Security (audit), Scenarios, Governance (HAZ-02 mitigation)

UC-04: Patient mis-identification prevention — clinical safety hazard control HAZ-04

AttributeDetail
Actor(s)Enrolled patient, FHIR Facade, Cerner EPR, MediCore Spine PDS
TriggerAny patient data read or write
Pre-conditionsPatient authenticated and enrolled
Main Flow1. Session JWT contains patient_nhs_number (verified at enrolment via PDS). 2. Every call to FHIR Facade asserts patient_nhs_number as both HTTP header and query parameter. 3. FHIR Facade verifies patient_nhs_number exists in PDS cache (TTL 24h) and has not been merged/retired. 4. FHIR Facade calls Cerner FHIR with National Patient ID as identifier — never with Cerner internal IDs. 5. Returned resources are verified to have matching patient identifier; mismatched responses raise MHT-HAZ-04 alert, block the request, and log to Sentinel. 6. If PDS returns “merged”, Facade fetches new identifier, updates enrolment, logs clinical-safety event, and forces patient re-verification on next login.
Post-conditionsPatient receives only their own data; any mismatch is blocked and raises a clinical safety event
Views InvolvedSecurity (identity binding), Data (identity controls), Scenarios, Governance (Hazard Log)

UC-05: Results release and view

AttributeDetail
Actor(s)Patient; Clinician (via EPR, out of band)
TriggerClinician releases a pathology or radiology result via EPR workflow (not via MyMedwick)
Pre-conditionsClinician has reviewed result and clicked “Release to Patient Portal” in Cerner; result is at least 24 hours old (safety delay per policy)
Main Flow1. Cerner emits ORU message with MyMedwick-release flag. 2. FHIR Facade ingests ORU, normalises to FHIR DiagnosticReport. 3. Results Service stores metadata and release flag in SQL. 4. Notification event published. 5. Notification Service sends SMS / push notification to patient. 6. Patient logs in and views result. 7. First view triggers a “patient-has-seen-result” audit event back to EPR (via outbound FHIR Facade call).
Post-conditionsPatient sees result; clinical team can see patient-viewed status in EPR; Caldicott-compliant audit trail maintained
Views InvolvedIntegration, Data, Security, Scenarios — explicit safety delay per clinical policy

3.6.2 Architecture Decision Records (ADRs)

Section titled “3.6.2 Architecture Decision Records (ADRs)”

ADR-001: Microsoft Azure over AWS as hosting platform

FieldContent
StatusAccepted
Date2025-02-05
ContextThe Trust has a sovereign UK cloud hosting requirement and operates an enterprise agreement with Microsoft. A technology choice was made between Microsoft Azure (UK South / UK West) and AWS (London / Ireland). Evaluation criteria: UK data residency assurance, alignment with MediCore Authority patterns, existing Trust skills, identity integration (Entra ID already Trust standard), regulatory attestations (ISO/IEC 27018), and cost.
DecisionAdopt Microsoft Azure with UK South (primary) and UK West (DR).
Alternatives ConsideredAWS: Strong services and mature UK presence. Rejected because: (a) Trust existing Entra ID / Intune investment favoured Microsoft stack for identity; (b) Existing staff skills heavily Azure-weighted (migration from on-premises to Azure for non-clinical systems); (c) AWS UK regions do not yet have the same UK sovereignty contractual commitments as Azure’s UK regions for Trust’s specific workloads; (d) ISO/IEC 27018 certification and MediCore alignment patterns more mature on Azure. Google Cloud: insufficient UK coverage and Trust skills at decision time. On-premises: inconsistent with Trust “cloud-first-where-appropriate” policy for non-clinical-record workloads.
ConsequencesPositive: unified identity stack (Entra ID, B2C, CIS2 federation pattern); mature MediCore landing zone patterns; Trust staff skills aligned; integrated Sentinel SIEM. Negative: Azure-specific skills required for deep ops; Moderate lock-in to Azure AD B2C and APIM (see 3.1.6).
Quality Attribute TradeoffsOperational Excellence: positive (tooling alignment). Security: positive (unified IAM). Cost: neutral (comparable to AWS). Portability: neutral-to-negative (B2C is high lock-in, mitigated by IdP facade pattern).

ADR-002: FHIR R4 over HL7v2 as the canonical clinical data contract

FieldContent
StatusAccepted
Date2025-02-20
ContextDownstream clinical systems (Cerner, WinPath, JAC) historically integrate via HL7v2 messaging (MLLP). MediCore Authority’s Interoperability Strategy mandates FHIR R4 for new clinical APIs. The FHIR Facade pattern allows both in parallel. The decision is whether MyMedwick’s internal clinical data model should be HL7v2 (the data’s native form) or FHIR R4.
DecisionUse FHIR R4 as the canonical internal model; the FHIR Facade performs HL7v2-to-FHIR mapping at the ingestion boundary.
Alternatives ConsideredHL7v2 as canonical: Lower impedance with legacy systems but rejected: (a) Inconsistent with MediCore Authority standards for new systems; (b) HL7v2 is poorly suited to JSON/REST consumption by modern web clients; (c) Would lock MyMedwick out of the ICS-wide FHIR-based data sharing roadmap. Bespoke domain model: Rejected — reinvents the wheel; FHIR R4 is a recognised MediCore standard and has mature .NET SDKs (Firely).
ConsequencesPositive: standards-aligned; forward-compatible with ICS Shared Care Record; strong tooling (Firely SDK); easier external audit. Negative: HL7v2-to-FHIR mapping is non-trivial for edge cases (address types, telecom systems) and must be clinically validated; FHIR conformance testing added to CI.
Quality Attribute TradeoffsOperational Excellence: positive (single internal model). Performance: neutral (mapping overhead marginal). Reliability: positive (tested mapping layer isolates EPR changes). Cost: slight increase in initial development, net positive over 3-year life.

ADR-003: Azure AD B2C over MediCore login for patient authentication

FieldContent
StatusAccepted (revised 2026-03-28; supersedes v1 which had proposed MediCore login)
Date2026-03-28
ContextPatient authentication choice. MediCore login is the national patient identity service; Azure AD B2C is Microsoft’s customer identity. National policy encourages MediCore login adoption but does not mandate it for Trust patient portals. Evaluation criteria: control over enrolment UX, MFA options, verification journey speed, ability to step-up MFA for sensitive actions, future optionality.
DecisionUse Azure AD B2C as the primary patient IdP; design the architecture to allow MediCore login to be federated in as an additional IdP in a future phase (target 2026-Q4).
Alternatives ConsideredMediCore login as primary: Recognised national identity; would avoid duplicate enrolment. Rejected for v2.0 because: (a) Trust requires explicit control over the enrolment UX to reach 800,000 patients quickly (including digitally-excluded patients who fail MediCore login’s identity proofing); (b) MFA method flexibility (SMS + TOTP + FIDO2) is richer in B2C; (c) Patients who fail MediCore login verification would be blocked whereas Trust can provide an “in-person at the Trust” fallback verification through its service desk. A facade (AuthGateway) is in place so MediCore login can be federated without breaking downstream services. Bespoke Trust IdP: rejected — reinventing identity is high-risk.
ConsequencesPositive: faster enrolment path for patients; Trust controls verification journey (including in-person fallback); future-proofed for MediCore login federation. Negative: risk of fragmented identity between MediCore login and Trust portal (mitigated by later federation); Trust bears responsibility for identity proofing to MediCore-equivalent standard (documented in DPIA-2025-004).
Quality Attribute TradeoffsOperational Excellence: neutral (extra policies to maintain). Security: positive (step-up MFA richer in B2C). Cost: negligible difference. Patient experience: positive (faster, more forgiving enrolment journey).

ADR-004: Outbox pattern for EPR-affecting write operations

FieldContent
StatusAccepted
Date2025-03-12
ContextPatient actions (cancel appointment, prescription request) must result in a reliable write to the EPR and a reliable notification to the patient. Naive implementation (call EPR then publish event) introduces a dual-write problem — either can fail.
DecisionWrite intent to SQL and to a local outbox table in the same transaction; a background dispatcher publishes events to Service Bus once committed.
Alternatives ConsideredDistributed transactions (MSDTC): not supported with Azure SQL + Service Bus. Saga (compensating actions): feasible but over-engineered for these flows. Event-first (publish before write): risks publishing events without persistent state.
ConsequencesPositive: at-least-once delivery guarantee; idempotent consumers handle duplicates; resilient to partial failures. Negative: outbox table requires cleanup; small latency added (typically less than 200ms).
Quality Attribute TradeoffsReliability: strongly positive. Performance: marginal negative. Operational Excellence: positive (clear failure semantics).

Log TypeEvents LoggedLocal StorageRetention PeriodRemote Services
Application logsRequest/response metadata (PII-redacted), service errors, business eventsApp Insights (immediate)2 years hot + 5 years archiveLog Analytics + Sentinel
Patient access auditNational Patient ID, session, action, purpose (Caldicott), outcomeADLS Gen2 (WORM immutable)7 yearsSentinel
Clinical safety event logHazard trigger events (HAZ-01..HAZ-07), clinical-safety-relevant errorsADLS Gen2 WORM + Sentinel workbook25 years (per MediCore clinical records)Sentinel + Trust Clinical Safety portal
Security event logAuthn/authz, WAF, PIM activations, key vault accessLog Analytics2 years hot + 5 years archiveSentinel
Infrastructure diagnosticAzure diagnostic logs (App Service, SQL, APIM, Front Door)Log Analytics90 days hot + 1 year archiveSentinel subset
Access logsFront Door, APIM, App Service HTTP logsLog Analytics90 daysSentinel

4.1.2 Observability — Monitoring & Alerting

Section titled “4.1.2 Observability — Monitoring & Alerting”
Alert CategoryTrigger ConditionNotification MethodRecipient
Portal availability (Front Door)External probe failure > 2 minPagerDuty P1 + TeamsSRE on-call
P95 latencyP95 > 800ms for 5 minPagerDuty P2SRE on-call
FHIR Facade error rate (EPR)> 2% errors over 5 minPagerDuty P1SRE on-call + Integration Lead
MediCore Spine error rate> 5% errors over 5 minTeams + PagerDuty P2SRE on-call
SMS delivery failure rate> 5% failures over 15 minPagerDuty P2 + Teams + Email to Patient ExperienceSRE on-call + Tom Doe
Clinical safety event raisedAny HAZ-* eventPagerDuty P1 + SMS to CSODr Amir Doe (CSO) + CSG
Authentication failure spike> 20 failures / 5 min from same IPSentinel alert + SOCSOC on-call
Data export / mass read anomalyUEBA high-severity eventSentinel SOAR playbook + SOC + CISOJane Bloggs
SQL CPU / DTU> 85% sustained for 10 minTeams + PagerDuty P3SRE + DBA
Certificate expiryAny cert < 30 days to expiryEmailPlatform team
Patient support backlog> 20 unresolved support ticketsEmailService Desk
CapabilityToolCoverage
APMApplication InsightsAll services (request, dependency, exception, custom clinical-safety events)
Infrastructure MonitoringAzure MonitorAll Azure resources
Log AggregationLog Analytics (Sentinel workspace)All logs
Distributed TracingOpenTelemetry into App InsightsAll microservices
DashboardsAzure Workbooks (6 workbooks: SLO, clinical safety, security, integrations, patient journey, cost)All stakeholders
Alerting & IncidentPagerDuty + Microsoft TeamsAll P1-P3 alerts
Synthetic MonitoringAzure Monitor Availability TestsTop 10 critical user journeys
QuestionResponse
Metrics collectedApp Service CPU/memory/instance count, SQL DTU/CPU/storage, Service Bus queue depth/active messages, APIM request count, FHIR Facade outbound latency, Redis hit ratio
Trend analysisWeekly automated workbook export; monthly capacity review
ThresholdsWarning 70%, Critical 85%
Capacity planningAnnual plan; quarterly refresh aligned to enrolment projections
ProcedureDescriptionOwnerDocumentation
Incident response (ITIL)P1: 15-min response, resolve 4h; P2: 30-min, 8h; post-incident review within 5 working daysTom DoeRunbooks in ADO wiki
Clinical safety incident handlingTriggered on any HAZ-* event; CSO paged; 15-min engagement; CS-160 incident report within 48h; SI if actual harm (Datix)Dr Amir DoeTrust Clinical Safety Management System (CSMS)
Change managementNormal: ARB ticket + 2 technical approvals + CSO sign-off for clinical-impact changes; Emergency CAB for P1 fixesRobert BloggsServiceNow change module
On-call rotation24x7, 1-week, 6 engineers; clinical safety secondary rota (3 clinical safety officers)Tom DoePagerDuty schedule
Patient supportDigital-support helpline 08:00-20:00 Mon-Sun; service desk L1 + portal L2Service Desk leadInternal KB
DSPT annual maintenanceEvidence refresh and re-submission by 30 June annuallySally BloggsDSPT portal
Clinical safety case reviewEvery major release and annually; CSG sign-offDr Amir DoeCSMS

4.2.1 Geographic Footprint & Disaster Recovery

Section titled “4.2.1 Geographic Footprint & Disaster Recovery”
QuestionResponse
Multi-venue deployment?Yes — UK South (primary) + UK West (DR)
DR strategyWarm standby: App Services running (scaled down), SQL auto-failover group, Service Bus geo-DR, ADLS RA-GRS
Data sovereignty constraintsYes — all regions UK only; no cross-border replication
RTO1 hour (P1 regional failure)
RPO15 minutes (SQL async replication lag)
AttributeResponse
Scaling capabilityFull auto-scaling (App Service autoscale rules on CPU + queue depth; SQL vCore elastic; APIM unit scaling)
Scaling detailsApp Service: 2-10 instances per service, scale-out in 90 seconds. SQL Business Critical: vertical scale in minutes. Front Door: unlimited edge. ACS: managed throughput.
Dependencies adequately sizedYes — ExpressRoute 1 Gbps (25% utilised at peak); EPR interface tested at 3x projected peak.
Dependency detailsMediCore Spine: national service, published SLA; EPR: tested to 5,000 concurrent sessions; GP Connect: limited per MediCore national throttles.
  • Yes
    • Component failures: All services 2+ instances, zone-redundant within UK South.
    • Graceful degradation: If EPR is unavailable, portal shows cached appointments (read-only) with staleness warning; writes (cancel/reschedule) are queued and shown as “pending” to the patient. If Spine is unavailable, enrolment is blocked but existing users continue to function.
    • Circuit breakers (Polly): EPR (5 consecutive failures -> open 30s), Spine (3 -> 60s), GP Connect (3 -> 60s).
    • Health checks: Liveness + readiness endpoints; App Service built-in plus custom health that checks SQL and Redis connectivity and EPR smoke call.
    • Testing practices: Quarterly DR drill (failover to UK West and back); monthly chaos test (Azure Chaos Studio — EPR outage simulation, Spine timeout, SMS provider outage); annual game day.
Component / DependencyFailure ModeDetectionRecoveryUser Impact
Single App Service instanceInstance crashApp Service health probeAuto-restart; traffic reroutedTransparent
Availability Zone (UK South)Zone outageAzure zone healthZone-redundant instances absorb; SQL ZR automaticallyBrief degradation (< 60s)
Primary region (UK South)Regional outageAzure region health + Front Door probesManual DR activation to UK West; DNS/Front Door failover; scale up App Service; promote SQL secondaryRTO 1h; patients see a branded maintenance page during failover
Azure SQLPrimary unavailableSQL HA probeAuto-failover group fails over; connection string unchanged30-60s interruption
Service BusPrimary namespace unavailableDelivery failuresGeo-DR pairing promotes secondaryBrief async latency
Cerner EPRInterface downFHIR Facade error spikeCircuit breaker opens; cached read data served; writes queued in Outbox; booking office notified for manual backfillDegraded: read stale data; writes delayed (hazard HAZ-05 mitigation)
MediCore SpineOutageFHIR Facade timeoutEnrolment blocked; existing user impact limited (demographics verified at login daily)New enrolment suspended; banner shown
GP ConnectOutageIntegration error spikeFeature hidden; banner shown: “GP appointment view temporarily unavailable”Partial feature degradation
Azure Communication Services (SMS)SMS delivery degraded/outageACS delivery receipts < thresholdAutomatic retry; email fallback; booking office manual-call worklist if neither delivered (HAZ-02 mitigation); evaluated fallback to GOV.UK Notify (validated in staging quarterly)Patient may receive email instead of SMS or receive a phone call from booking office
Azure AD B2COutageLogin failure rateCached refresh tokens allow existing sessions to continue up to 8h; new logins blocked; banner shown; incident P1New logins blocked during outage
ExpressRouteLink failureBGP / probeAutomatic failover to IPsec VPN (30-60s BGP convergence)Brief EPR read degradation
AttributeDetail
Backup strategyAzure SQL point-in-time (35 days) + LTR (10 weekly / 12 monthly / 10 yearly); ADLS audit WORM immutable (7 years); Key Vault soft-delete 90 days + purge protection
Backup typeContinuous (transaction log) + daily full (SQL); append-only WORM (audit)
Backup frequencySQL: continuous + daily snapshot; ADLS: real-time append; LTR weekly/monthly/yearly
RetentionSQL: 35 days PITR + LTR schedule; ADLS: 7 years immutable
ImmutabilitySQL LTR cannot be deleted by service principals (management lock); ADLS Gen2 immutable blob policy (7-year legal hold)
EncryptionAll backups CMK-encrypted; cross-region copies re-encrypted with UK-West CMK
#ScenarioRecovery ApproachRTORPO
1Zone failure (UK South)Zone-redundant resources absorb automatically5 min0
2Region failure (UK South)Manual DR activation to UK West1 hour15 min
3Service component failureApp Service auto-restart; blue/green rollback via slot swap10 min0
4SQL corruptionPoint-in-time restore to last known good2 hours1 min
5Ransomware / cyber incidentIsolate via Sentinel playbook; restore from immutable backups (Key Vault purge protection; SQL LTR; ADLS WORM)4 hours1 hour
6EPR interface outageCached reads + queued writes; manual reconciliationContinuous (degraded)0
7Data sovereignty breach (e.g., log accidentally exported)ICO notification within 72h; Sentinel investigation; isolate and purge export24 hoursN/A

MetricTargetMeasurement
P50 response time< 200msApp Insights
P95 response time< 800msApp Insights
P99 response time< 2sApp Insights
Throughput3,000 req/s sustained, 6,000 peakAPIM metrics + load test
Error rate (5xx)< 0.05%APIM + Front Door
Patient sign-in time< 5s P95 (web); < 3s P95 (mobile with biometric)RUM via App Insights
SMS delivery within 90s> 98%ACS delivery receipts
EPR FHIR read P95< 1sFHIR Facade dependency telemetry
Results release to patient-visible latency< 10 min (excluding 24h safety delay)End-to-end trace
AccessibilityWCAG 2.2 AAAxe automated + manual audit (annually, external)
AttributeDetail
ApproachLoad (sustained 3,000 req/s for 1h); stress (ramp to 8,000); soak (1,500 req/s for 24h); spike (0-6,000 in 60s)
ToolsAzure Load Testing (k6-based)
EnvironmentStaging (production-mirror)
FrequencyEvery release + quarterly full regression; accessibility re-test on every major release
MetricCurrent (Mar 2026)1 Year3 Years5 Years
Enrolled patients280,000520,000720,000800,000 (ceiling)
MAU (monthly active)120,000260,000430,000520,000
Peak req/s1,8003,0004,5006,000
SMS messages/month340,000650,000950,0001,200,000
Data volume (SQL)40 GB80 GB150 GB250 GB
Audit volume (ADLS)120 GB/yr220 GB/yr350 GB/yr450 GB/yr

Design scales to 5-year horizon. Seasonal demand pattern: +40% in January (New Year health engagement); +25% each Monday morning; lulls in August.

StrategyImplementation
Right-sizingPremium v3 App Service plans chosen for faster warm-up; reviewed quarterly against Azure Advisor
CachingRedis for appointment reads (60s TTL); APIM response caching for static reference data (5 min)
Asynchronous processingAll notifications and audit writes async via Service Bus
NetworkPrivate Endpoints avoid public egress fees; CDN (Front Door) for static web assets
Database optimisationIndexed columns; pg-equivalent query tuning; read replicas for reporting if needed; Always Encrypted deterministic only where queryable
AttributeDetail
Latency requirementsPatient-perceived TTFB < 300ms P95; EPR round-trip < 1s P95
Bandwidth requirements400 Mb/s peak egress; 150 Mb/s peak ingress
CDNAzure Front Door edge caching for static assets
OptimisationHTTP/2; Brotli compression; connection keep-alive; ExpressRoute for EPR

PostureSelectedDetail
Some options more expensive chosen for non-cost reasons[x]SQL Business Critical Zone Redundant selected over General Purpose (approximately 2.8x cost) for zone redundancy and faster failover, justified by Tier 1 Critical rating; dedicated ASEv3 chosen over shared App Service plan for isolation; Premium Key Vault HSM chosen over standard for FIPS 140-2 Level 3.
  • Yes — detailed cost modelling performed using Azure Pricing Calculator; TCO compared with maintaining PKB pilot + building new in-house solution shows 35% reduction over 5 years.
ComponentMonthly Cost (GBP)Notes
App Service Environment v3 + Premium v3 plans7,800ASEv3 isolation premium + 6 P2v3 instances average
Azure SQL Database (Business Critical Zone Redundant)5,4008 vCore Business Critical + Auto Failover Group secondary
Azure API Management (Premium, 2 regions)4,200Premium unit UK South + UK West
Azure Front Door Premium + WAF1,900Premium tier + WAF policies
Azure Communication Services (SMS + Email)3,200~650,000 SMS/month at UK rates
Azure Cache for Redis (Premium)700P1 tier
Azure Service Bus (Premium, Zone Redundant + Geo-DR)900Premium Messaging Unit
Azure AD B2C (P2)1,600Active users (MAU) pricing
Key Vault Managed HSM2,200Dedicated HSM + transactions
ADLS Gen2 + immutable blob + LTR400150 GB/yr + long-term retention
Log Analytics + Sentinel1,800Data ingestion + retention
Azure Monitor + App Insights600Telemetry
ExpressRoute (UK South)9001 Gbps port + data transfer
Azure Firewall + VNet + Private Endpoints1,100Hub firewall attribution
Azure Bastion + Defender for Cloud500
Other (DNS, Backup, miscellaneous)300
Total monthly (production)33,500
Total annual (production)402,000
Non-production environments3,500/monthDev + Test + Staging + Training
Total annual (all environments)444,000Aligned to Opex estimate
  • No — design meets all requirements within envelope. Reserved instances (1-year) reduce App Service and SQL spend by ~25%.
PracticeImplementation
Cost monitoringAzure Cost Management + custom workbook; weekly report to Robert Bloggs (CDIO)
Cost allocationTagging strategy: CostCentre=CC-4820, Service=MyMedwick, Environment=prod/staging/test/dev, Owner=Dr-Raj-Doe
Reserved capacity1-year reserved instances for App Service, SQL, APIM
RightsizingAzure Advisor monthly; formal quarterly review
Waste eliminationNon-prod auto-shutdown 19:00-07:00 weekdays, all weekend (via Azure Automation)
Budget governanceAzure Budget alerts at 80% and 100% forecast; change > GBP 500/month requires Platform Lead approval

QuestionResponse
Hosting location chosen to reduce environmental impact?No — chosen for data residency. Azure UK South’s carbon intensity is moderate; Microsoft’s 2025 commitment to 100% renewable matching will improve this further.
Workload demand patternVariable predictable — daily peak 07:30-09:00 and 18:00-20:00; lulls overnight
QuestionResponse
Continuous availability required?Yes — Tier 1 Critical
Scale down off-peak?Partially — minimum 2 instances always; scale out on demand
Non-prod auto-shutdown?Yes — saves approximately GBP 800/month
QuestionResponse
Rightsized?Yes — monthly Azure Advisor review
CPU utilisation monitored?Yes — target 40-60% business hours
Highest performance-per-watt hardware?Azure manages underlying hardware; workload placed on Premium v3 SKUs which use newer, more efficient silicon
QuestionResponse
Language / framework efficiency.NET 8 is highly optimised; AOT compilation evaluated for Notification Service (deferred due to ACS SDK incompatibility)
Optimised for platform and workload?Yes — connection pooling (Npgsql / SqlClient), efficient JSON serialisation (System.Text.JSON), source-generated serializers
Efficient algorithms / data structures?Yes — indexed lookups, pagination enforced
vCPU hours per request minimised?Yes — async offload reduces per-request compute
QuestionResponse
Data close to compute?Yes — same region, Private Endpoints
Replicas minimised?Only regulator-justified replicas (SQL ZR, DR, WORM audit)
Old / unused data removed?Yes — SQL archival, ADLS lifecycle to cool tier after 1 year
Efficient formats / compression?Brotli compression on HTTP; gzip on audit blobs before upload
Jobs prioritised and distributed?Yes — nightly reconciliation jobs scheduled 02:00-04:00 local
Efficient networking?Yes — Private Endpoints; no NAT for internal traffic

  • Internally developed by Trust Digital Product + Integration teams (12 FTE combined).
AttributeDetail
Source controlAzure DevOps Git (Trust org)
CI/CD platformAzure DevOps Pipelines
Build automationPipelines on PR and main; .NET build + test; npm build + test; container images to Azure Container Registry
DeploymentBicep IaC; pipelines deploy to dev -> test -> staging -> prod with manual approvals; blue/green via App Service slots
Test automationxUnit (.NET), Jest (web), integration tests (Testcontainers); FHIR conformance (Inferno); contract tests (Pact); Axe for accessibility
ControlImplementation
Security requirements identificationThreat model MHT-TM-2025-008; clinical-safety stories in backlog; OWASP ASVS L2 baseline
SASTSonarQube (Azure DevOps integration); quality gate blocks on Critical/High
DASTOWASP ZAP nightly against staging
SCAMend (formerly WhiteSource); blocks on High/Critical CVEs
Container scanningMicrosoft Defender for Containers; ACR-native scanning
Secure codingOWASP guidelines; annual training; security champion per squad
Patch managementCritical CVE: 24h mitigation plan, 7-day patch; High: 30 days; base images rebuilt weekly
Clinical safety testingDedicated clinical-safety regression suite run on every release; CSO sign-off on the suite quarterly
ClassificationSelected?Description
Replace[x]PKB pilot replaced by in-house MyMedwick
AttributeDetail
Deployment strategyPhased rollout: Trust staff (dogfooding) -> invited cohort 5,000 patients -> public beta -> general availability. PKB decommissioned after 3-month parallel run.
Data migration modeContinuous sync — MyMedwick reads through to EPR; no bulk migration from PKB; PKB patient enrolment list used to invite PKB users to re-enrol in MyMedwick
Data migration methodAzure Data Factory one-time extract of PKB user list (National Patient IDs only) for invitation mailing
Data volumeApproximately 40,000 National Patient IDs
End-user cutoverPhased — patients invited in cohorts over 3 months
External system cutoverPhased — PKB interface disabled after final patient migrated
Max acceptable downtimeZero (parallel run)
Rollback planPKB remained live throughout; any issue could route traffic back to PKB via Trust web-site banner and direct link
Acceptance criteria≥ 95% of active PKB users re-enrolled in MyMedwick or formally opted out; CSG sign-off on post-live clinical safety case
Transient infrastructureYes — ADF pipeline for PKB extract (decommissioned post-migration)
Test TypeScopeApproachEnvironmentAutomated?
UnitAll codexUnit, JestCIYes
IntegrationServices + SQL + Service BusTestcontainersCI + Test envYes
ContractFHIR against Cerner, Spine mocksPact + Inferno FHIR test harnessCI + StagingYes
FHIR conformanceFHIR R4 resources conformanceInferno (ONC)CI + StagingYes
AccessibilityWCAG 2.2 AAAxe + manual audit (annual external)Staging + ProdPartially
Clinical safety regressionAll HAZ-* mitigationsDedicated suite; CSO sign-offStagingYes
PerformanceLoad / stress / soak / spikeAzure Load TestingStagingYes
PenetrationAnnualNCC GroupPre-prodNo
DRRegion failoverQuarterly drillProd + DRPartial
AttributeDetail
Release frequencyFortnightly (every other Thursday) with ability for hotfix any day
Release processFeature branch -> PR (2 approvals + CSO sign-off if clinical-safety-impacting) -> merge to main -> auto-deploy to staging -> clinical safety regression + accessibility + load -> manual approval -> blue/green slot swap in production
Release validationSmoke tests + canary (5% traffic for 30 min) + auto-rollback if error rate > 0.1%
Feature flagsLaunchDarkly for phased rollout (per-patient-cohort, per-clinic)
Clinical-safety change controlAny change touching a HAZ-tagged component requires CSO review and CSG sign-off before promotion to production
AttributeDetail
Support modelL1 Trust Service Desk (08:00-20:00); L2 SRE on-call (24x7); L3 Digital Product + Integration team (08:00-18:00 working days); L4 CSO + Solution Architect
Support hours24x7 on-call for Tier 1
SLA99.9% monthly availability (external commitment); P1 acknowledge 15 min; P2 30 min; P3 4h; clinical safety P1 -> CSO within 15 min
EscalationL1 -> L2 (15 min P1) -> L3 -> L4 + CSO + CISO as appropriate
Clinical safety escalationAny HAZ-* event -> CSO (Dr Amir Doe) -> CSG if confirmed -> Datix + CQC if actual harm
QuestionResponse
Non-prod auto-shutdown schedule and enforcementAzure Automation runbook scales-in non-prod App Service plans 19:00-07:00 weekdays + weekends; Azure SQL auto-pause on non-prod databases. Azure Policy “deny on tag missing” prevents new non-prod resources without an auto-shutdown tag.
Right-sizing review cadenceQuarterly via Azure Advisor + Application Insights metrics. Last review (2026-Q1) downgraded the staging Pv3 from P1v3 to P0v3, recovering ~£140/month.
Unused / orphaned resource reclamationMonthly review of orphaned managed disks, unattached public IPs, stale storage account containers; deleted after 30 days idle without recorded exception.
Carbon footprint reported alongside costYes — Azure Emissions Impact Dashboard reviewed monthly alongside cost; reported quarterly to Trust Sustainability Committee against the MediCore Net Zero target (2040).
Environment retirement actually deletes (vs stops)Yes — decommissioning runbook requires Bicep destroy + Storage Account deletion + Key Vault soft-delete purge after retention. Trust CMDB (ServiceNow) entry marked Retired only after Azure Cost Management confirms zero spend for 30 days.
Skill AreaCurrent LevelAction
Azure (App Service, SQL, APIM, Front Door)HighOngoing — 3 Azure Solutions Architect Expert certs in progress
Bicep / IaCHighNone
.NET 8HighNone
FHIR R4MediumAction — Firely training for 2 integration engineers (Q2 2026)
MediCore interoperability (Spine, e-RS, GP Connect)MediumAction — MediCore Digital partner programme training
Clinical safety (CS-129/0160)MediumAction — second CSO designate in training (supports succession planning)
Information GovernanceHighNone
Security / SentinelMediumAction — SOC MSSP engaged to cover 24x7
  • A: Fully capable — established SRE team plus clinical safety officer succession plan.
  1. Azure PaaS resources are always running (App Service, SQL, APIM).
  2. On deployment, App Service slot-swap is the activation step; health checks verify all dependencies.
  3. After any DR failover, startup sequence: promote SQL secondary -> scale up App Service in UK West -> update Front Door origin -> verify EPR connectivity via ExpressRoute backup path -> enable external traffic. Full cold-start ~25 minutes.
ConcernApproach
Software versions current.NET: within 90 days of LTS release; SQL: minor patches in monthly maintenance window; mobile OS support: last 2 major versions per Apple/Google policy
Certificate managementAzure Key Vault + Front Door managed certificates; auto-renewal; alerts at 30/14/7 days
Dependency managementMend + Dependabot; quarterly review
MediCore Spine / e-RS / GP Connect interface updatesMediCore Digital issues are tracked via the Digital Assurance Manager; change windows coordinated
AttributeDetail
Intended lifespan7-10 years; major review at 5 years
End-of-life triggersICS-wide patient portal adoption (possible 2028+); MediCore login mandated
Decommissioning blockers7-year audit retention; patient records retention under Records Management Code of Practice
Data disposalPatient data: secure deletion (NIST 800-88 equivalent via Azure Storage secure delete + Key Vault key destruction); audit: retained to legal minimum then lifecycle-expired
Infrastructure disposalBicep what-if + Terraform destroy; Azure resources deleted; DNS removed; ADO project archived
AttributeDetail
Exit strategyDomain services are standard .NET 8 containers; SQL is standard SQL Server; FHIR facade and contract are portable; audit is object storage; identity (B2C) is highest lock-in
Data portabilitySQL bacpac; ADLS standard object storage export; FHIR data re-exposable through another facade
Vendor lock-inOverall Moderate. Primary lock-in: Azure AD B2C (High) and APIM policies (Moderate). Exit effort: approximately 4-6 months for a similar-sized team.
Exit timeline6-9 months

IDConstraintCategoryImpact on DesignLast Assessed
C-001All data must reside in the UK (UK GDPR, DSPT, Caldicott)RegulatoryUK South primary, UK West DR; Azure Policy “Allowed Locations”; ACS UK region2026-03-01
C-002CS-129 and CS-160 mandatory for any change with clinical impactRegulatoryClinical Safety Officer required; Hazard Log; Clinical Safety Case per release2026-03-01
C-003Must integrate with Cerner Millennium EPR (legacy HL7v2)TechnicalFHIR Facade pattern required; no changes to EPR in scope2025-12-01
C-004Must comply with MediCore DSPT (annual submission)RegulatoryExtensive security and IG controls; evidence maintained continuously2025-06-30 (last submission)
C-005WCAG 2.2 Level AA accessibility required (public sector body regs)RegulatoryAccessibility built in from alpha; external audit annually2026-01-15
C-00699.9% availability SLA committed in Trust Digital StrategyCommercialZone-redundant SQL; multi-region DR; App Service Premium v32026-03-01
IDAssumptionImpact if FalseCertaintyStatusOwnerEvidence
A-001Cerner FHIR R4 interface will remain available and contractually supported for the life of MyMedwickWould require re-engineering to HL7v2-only integrationHighClosedDr Raj DoeCerner contract extension to 2030; FHIR R4 on roadmap
A-002Azure AD B2C will remain a Microsoft strategic serviceWould require migration to Entra External IDMediumOpenJane BloggsMicrosoft has announced B2C long-term support and Entra External ID convergence; migration path understood
A-003Patient enrolment growth 180k/year for 3 yearsCapacity plan under- or over-sizedMediumOpenNisha DoeAlpha + beta uptake consistent with trajectory
A-004MediCore login federation remains optional for Trust portalsWould require emergency MediCore login integrationMediumOpenSally BloggsCurrent MediCore Authority policy position; monitored
A-005Patients have reliable mobile signal for SMS OTPMFA failure rate could increase; requires TOTP fallback adoptionHighClosedDr Raj DoeResearch shows ≥ 97% UK mobile coverage in Trust catchment
IDRisk EventCategorySeverityLikelihoodOwner
R-001Clinical safety incident: wrong results displayed to patient leading to patient harmCompliance / SafetyCriticalLowDr Amir Doe
R-002GP Connect outage prevents Phase 2 cross-care appointment featureTechnicalHighMediumPriya Bloggs
R-003SMS delivery failure causes missed critical appointment (e.g., oncology follow-up)Operational / SafetyHighMediumTom Doe
R-004Patient mis-identification (wrong patient’s record shown)Compliance / SafetyCriticalLowDr Amir Doe
R-005Data breach requiring ICO notification within 72 hoursSecurityCriticalLowJane Bloggs
R-006Cerner EPR upgrade breaks FHIR interfaceTechnicalHighMediumDr Raj Doe
R-007Azure AD B2C outage blocks patient loginsTechnicalHighLowJane Bloggs
R-008DSPT submission failure / downgrade from Standards MetComplianceHighLowSally Bloggs
R-009Accessibility regression fails WCAG 2.2 AAComplianceMediumMediumNisha Doe
R-010Clinical safety case lapses (annual review overdue)Compliance / SafetyHighLowDr Amir Doe
R-011Credential-stuffing attack compromises patient accountsSecurityHighMediumJane Bloggs
R-012ACS (SMS provider) outage; no alternative contractedOperationalHighLowMark Doe
IDMitigationPlanResidual RiskLast Assessed
R-001MitigateClinical safety regression suite; CSO sign-off per release; 24h release delay for first-time viewing; clinician release control in EPR; audit trailLow2026-03-01
R-002MitigateFeature flag allows instant disable; cached availability with banner; read-only fallbackMedium2026-03-01
R-003MitigateRetry + email fallback + booking office manual exception worklist (HAZ-02); patient UI shows “last notified” timestamp; monthly reconciliation reportLow2026-03-01
R-004MitigateStrict National Patient ID binding; PDS verification; clinical safety control HAZ-04; automated regression test; CSO sign-offLow2026-03-01
R-005MitigateDefender for Cloud + Sentinel + annual pen test; ICO breach process documented and rehearsed; DPO engaged; DSPT incident reportingLow2026-03-01
R-006MitigateContract tests + FHIR conformance; Cerner change notice process (60 days); facade pattern isolates changeMedium2026-01-15
R-007Accept (with mitigation)Cached refresh tokens for existing sessions up to 8h; maintenance banner; P1 incident processLow2026-03-01
R-008MitigateContinuous evidence gathering; quarterly dry-run review with IG team; scores trackedLow2025-12-01
R-009MitigateAxe automated + manual audit + user testing with disabled-users panel; annual external auditLow2026-02-10
R-010MitigateCSMS ticket scheduler; dual CSO rota; automated reminders 30/14/7 daysLow2026-03-01
R-011MitigateBreached-password detection; adaptive rate limits; MFA mandatory; Sentinel UEBA; SOC 24x7Medium2026-03-01
R-012MitigateEmail fallback; GOV.UK Notify fallback validated in staging; booking office manual call processMedium2026-02-15
IDDependencyDirectionStatusOwnerEvidenceLast Assessed
D-001Cerner Millennium EPR HL7v2 + FHIR R4 interfaces availableInboundResolvedEPR teamOperational since alpha2026-03-01
D-002MediCore Spine PDS availabilityInboundCommittedMediCore DigitalNational service2026-03-01
D-003MediCore CIS for clinician admin authInboundCommittedMediCore DigitalNational service2026-03-01
D-004MediCore e-Referral Service APIInboundResolvedMediCore DigitalIntegration live since 2025-092026-03-01
D-005GP Connect AppointmentsInboundCommittedMediCore DigitalIntegration live since 2025-09 (Phase 2)2026-03-01
D-006national healthcare secure network CN-SP connectivityInboundResolvedTrust NetworkDual-link live2026-01-10
D-007Azure Communication Services UK regionInboundResolvedMicrosoftEnterprise agreement; UK region available2025-11-15
D-008DSPT 2025/26 submissionOutboundResolvedSally BloggsSubmitted 2025-06-30; Standards Met2025-06-30
D-009CS-160 deployment safety case for each releaseOutboundIn progress (continuous)Dr Amir DoeApproved for v2.02026-03-28
IDIssueCategoryImpactOwnerResolutionStatusLast Assessed
I-001Cerner FHIR R4 interface intermittent 502 errors during overnight batchTechnicalMediumDr Raj DoeCerner aware; FHIR Facade retry with back-off implemented as interim mitigation; permanent fix expected in Cerner 2026.03 releaseIn progress2026-03-15
I-002Two patients reported receiving SMS reminders at 03:00 due to scheduler timezone misconfigurationOperationalMediumTom DoeScheduler corrected to Europe/London; affected patients contacted; CS-160 incident report filedResolved2025-12-08
I-003Accessibility audit identified 3 AA-level issues (focus order on results page, colour contrast on notification chip, aria-label on cancel button)ComplianceLowNisha DoeFixes in current sprint; external auditor re-test booked for 2026-04In progress2026-03-20
QuestionResponse
Does this design create exceptions to current policies and standards?No
Accepted through exceptions process?N/A
QuestionResponse
Creates a process library issue?No
Acknowledged by process owner?N/A
QuestionResponse
Materially changes the Trust’s risk profile?Yes — introduces a new patient-facing external surface and new data processing. Evaluated with Risk Committee; risk appetite confirmed. DPIA DPIA-2025-004 and Clinical Safety Case v3 signed.
Evaluated with Risk and Controls?Yes
ADR #TitleStatusDateImpact
ADR-001Azure over AWS as hosting platformAccepted2025-02-05Platform direction
ADR-002FHIR R4 over HL7v2 as canonical clinical data contractAccepted2025-02-20Integration model
ADR-003Azure AD B2C over MediCore login for patient identityAccepted (revised 2026-03-28)2026-03-28Identity model; MediCore login federation planned
ADR-004Outbox pattern for EPR-affecting writesAccepted2025-03-12Reliability pattern
Standard / PrincipleRequirementHow the Design Satisfies ItEvidence Section
UK GDPR Art 5(1)(c)Data minimisationFHIR facade requests only required fields; PII not logged; API responses tailored to purpose3.2, 3.4
UK GDPR Art 5(1)(f)Integrity and confidentialityTLS 1.3; Always Encrypted on PII; CMK with HSM; audit; WAF3.4, 3.5
UK GDPR Art 6(1)(e) + Art 9(2)(h)Lawful basis for special category dataLawful basis documented in DPIA-2025-0042.3, 3.4
UK GDPR Art 17Right to erasurePatient-initiated erasure workflow, with records-retention overlay3.4, 3.6
UK GDPR Art 32Security of processingFull IAM, encryption, monitoring, threat model3.5
UK GDPR Art 33Breach notification within 72hDocumented incident process with DPO engagement4.1, 6.3
UK GDPR Art 35DPIADPIA-2025-004 and DPIA-2025-018 completed2.3, 3.4
MediCore DSPT 2025/26 (10 assertions)Standards MetEvidence package submitted 2025-06-30; scored Standards Met2.3, 3.5, 6.8
CS-129 (Manufacturer)Clinical risk management (manufacturer)CSO appointed; Clinical Safety Case v3 approved; Hazard Log MHT-HAZ-LOG-0208; regression suite2.3, 3.5, 3.6, 5.1
CS-160 (Deployment)Clinical risk management (deployment)Deployment Safety Case signed by Trust CSO per release; CSG sign-off5.4, 6.4
Caldicott PrinciplesJustifiable purpose, minimum necessary, need-to-knowCaldicott Guardian approval of data uses; access audit2.3, 3.4
WCAG 2.2 AAPublic sector accessibilityAxe + manual + external audit; accessibility statement published4.3, 5.3, 6.3
NCSC Cloud Security Principles14 principlesPrivate Endpoints; CMK in HSM; Sentinel; Defender for Cloud; Trust landing zone3.3, 3.5
MediCore Authority Interop StandardsFHIR R4, National Patient ID as primary identifierFHIR Facade; National Patient ID binding3.2, 3.5
Cyber Essentials PlusTrust certificationInherited; evidenced3.3, 3.5

TermDefinition
ACSAzure Communication Services — Microsoft’s cloud communication platform
ALZAzure Landing Zone
ASEv3App Service Environment v3 — dedicated, isolated App Service compute
Caldicott GuardianSenior person in a MediCore organisation responsible for protecting the confidentiality of patient information
CCIOChief Clinical Information Officer
CIS2MediCore Care Identity Service 2 — MediCore staff identity and authentication
CDIOChief Digital Information Officer
CQCCare Quality Commission — England’s health and social care regulator
CSGClinical Safety Group (Medwick’s multi-disciplinary clinical safety panel)
CSOClinical Safety Officer — defined in CS-129
CS-129MediCore Digital standard: Clinical Risk Management — Manufacturer
CS-160MediCore Digital standard: Clinical Risk Management — Deployment
DPIAData Protection Impact Assessment
DPOData Protection Officer
DSPTMediCore Data Security & Protection Toolkit
EPRElectronic Patient Record
e-RSMediCore e-Referral Service
FHIRFast Healthcare Interoperability Resources (HL7 standard)
GP ConnectMediCore service providing GP information via FHIR
HAZHazard (entry in Hazard Log)
national healthcare secure networkHealth and Social Care Network — private MediCore network
ICOInformation Commissioner’s Office — UK data protection regulator
ICSIntegrated Care System
MESHMediCore Message Exchange for Social Care and Health
MHRAMedicines and Healthcare products Regulatory Agency
MICSMedwick Integrated Care System
MyMedwickThe solution described in this SAD
MediCore DSPTMediCore Data Security & Protection Toolkit
PACSPicture Archiving and Communication System
PDSPersonal Demographics Service (MediCore Spine)
PKBPatient Knows Best (legacy portal being replaced)
RAMediCore Registration Authority (manages MediCore identity cards)
RoPARecord of Processing Activities (UK GDPR Art 30)
SCRSummary Care Record (MediCore Spine)
SROSenior Responsible Officer
SpineMediCore Spine — national set of health services (PDS, SCR, etc.)
TLS-MATLS Mutual Authentication
UBRNUnique Booking Reference Number (e-RS referrals)
WCAGWeb Content Accessibility Guidelines
WORMWrite Once, Read Many (immutable storage)
DocumentVersionDescriptionLocation
MediCore Data Security & Protection Toolkit2025/26Mandatory annual MediCore IG assessmentdsptoolkit.nhs.uk
CS-129 Clinical Risk Management: Manufacturer2018MediCore Digital clinical safety standardMediCore Digital
CS-160 Clinical Risk Management: Deployment2018MediCore Digital clinical safety standardMediCore Digital
MediCore Authority Interoperability Standards2025FHIR R4 profiles and guidanceMediCore Authority
Trust Information Security Policy4.1Medwick corporate security policyTrust intranet
Trust Clinical Risk Management Policy3.2Medwick clinical risk governanceTrust intranet
DPIA — MyMedwickDPIA-2025-004Data Protection Impact AssessmentTrust IG library
Clinical Safety Case v3 — MyMedwickCSC-MHT-0208-v3Clinical safety case per CS-129Trust CSMS
Hazard Log — MyMedwickMHT-HAZ-LOG-0208Live hazard registerTrust CSMS
Deployment Safety Case v3 — MyMedwickMHT-DSC-0208-v3Per CS-160Trust CSMS
MyMedwick Threat ModelMHT-TM-2025-008STRIDE threat modelTrust Security Library
NCSC Cloud Security Principles202414 principlesncsc.gov.uk
Accessibility Statement — MyMedwick2026-01Public-facing accessibility statementmymedwick.nhs.uk/accessibility
WCAG 2.2W3C Recommendation 2023Accessibility guidelinesw3.org/WAI/WCAG22
Standard / Pattern IDNameVersionApplicability
HL7-FHIR-R4HL7 FHIRR43.2 Integration
HL7v2HL7 v2.52.53.2 Integration (legacy inbound)
OWASP-ASVS-4.0Application Security Verification Standard4.05.1
OWASP-CRSOWASP Core Rule Set3.23.3, 3.5 WAF
NIST-800-88Media SanitisationRev 15.9
WCAGWeb Content Accessibility Guidelines2.2 AA3.6, 4.3, 5.3
CS-129Clinical Risk Management (Manufacturer)20183.5, 3.6, 5.1
CS-160Clinical Risk Management (Deployment)20185.4, 6
C4-ModelC4 Model for Software ArchitectureN/A3.1
12-FactorThe Twelve-Factor AppN/A3.1
RoleNameDateSignature / Approval Reference
Solution ArchitectDr Raj Doe2026-03-28ADO: MYM-ARB-2026-008 (approved)
Clinical Safety OfficerDr Amir Doe2026-03-26CSMS: CSC-MHT-0208-v3 (approved)
CCIODr Fiona Doe2026-03-27ADO: MYM-CLIN-2026-004 (approved)
Caldicott GuardianHelen Bloggs2026-03-25IG: CG-2026-011 (approved)
IG Lead / DPOSally Bloggs2026-03-25IG: IG-2026-018 (approved)
CISOJane Bloggs2026-03-26ADO: MYM-SEC-2026-015 (approved)
CDIORobert Bloggs2026-03-28ADO: MYM-ARB-2026-008 (approved)
SRO / Deputy CEOPaul Bloggs2026-03-28Board: MHT-BOARD-2026-006 (approved)
ARB / Design AuthorityDesign Authority (chaired by Robert Bloggs)2026-03-28ADO: MYM-ARB-2026-008 (approved)

Assessment Summary

This SAD was assessed at Comprehensive depth. The scores below reflect a mature, well-documented architecture for a Tier 1 Critical clinical system under MediCore clinical safety and information governance standards.

SectionScoreJustification
0. Document Control5Full version history, multiple clinical and IG contributors/approvers, clear scope, related documents referenced
1. Executive Summary5Business drivers with priority; strategic alignment; reuse assessment; current-state documented; Tier 1 Critical criticality justified by patient-harm analysis
2. Stakeholders & Concerns5Comprehensive register including Caldicott Guardian, CSO, CCIO and external regulators; concerns matrix fully mapped; twelve applicable regulations
3.1 Logical View5Full component decomposition; design patterns with rationale; lock-in assessment for all components; service-to-capability mapping
3.2 Integration & Data Flow5All internal and external integrations documented with protocol/auth; ten API contracts versioned; end user access patterns; national healthcare secure network and MediCore national services modelled
3.3 Physical View5Deployment diagram; compute fully specified (ASEv3); full networking including ExpressRoute, national healthcare secure network, Private Endpoints; six environments; security agents
3.4 Data View5All data stores classified with retention and encryption; Always Encrypted for PII; UK data sovereignty; two DPIAs; data integrity and patient identity controls
3.5 Security View5STRIDE threat model with eleven threats including two explicit clinical safety threats; comprehensive IAM (patient, clinician, service); HSM-backed CMK; Sentinel with clinical-safety analytics
3.6 Scenarios5Five architecturally significant use cases including a clinical-safety control scenario (UC-04); four ADRs with alternatives and tradeoffs
4.1 Operational Excellence5Centralised logging with Sentinel; Azure Monitor/App Insights; PagerDuty with clinical safety escalation; dedicated clinical-safety workbook
4.2 Reliability5Zone-redundant primary with warm-standby DR; RTO 1h / RPO 15min validated through quarterly drill; chaos testing; Outbox for durability
4.3 Performance5P50/P95/P99 targets; 3,000 req/s sustained; Azure Load Testing in pipeline; caching; 5-year growth projections
4.4 Cost5Monthly cost breakdown by component; reserved instances; FinOps; tagging; rightsizing cadence
4.5 Sustainability4Non-prod auto-shutdown; efficient SKUs; Brotli compression; rightsizing. Score reduced from 5: no carbon metrics baselined; formal sustainability KPIs still in development
5. Lifecycle5CI/CD with SAST/DAST/SCA and FHIR conformance; phased migration (PKB replacement); clinical safety regression; fortnightly release with CSO sign-off; exit plan
6. Governance5Six constraints; five assumptions with evidence; twelve risks with mitigations (incl. clinical safety); nine dependencies; three issues; fifteen-item compliance traceability
7. Appendices5Domain glossary (healthcare-specific); fourteen reference documents; ten standards; full approval sign-off with CSO and Caldicott Guardian
Overall4.9Comprehensive depth achieved. Exemplary documentation for a Tier 1 Critical MediCore Trust clinical system.