Compliance briefing
DTAC self-assessment
Holdfast's self-assessment against the NHS Digital Technology Assessment Criteria (DTAC) - the standard NHS England uses to evaluate digital health tools before procurement, across five domains: clinical safety, data protection, technical security, interoperability, and usability & accessibility. Describes the MVP demo deployment as it exists today; where a control isn't yet in place, this page says so.
Product one-liner: Holdfast is a digital check-in and risk-monitoring tool for NHS Trust/ICB mental health waiting lists. Patients complete short structured check-ins while they wait; each check-in is scored against explainable, rules-based clinical safety criteria; scores above threshold auto-escalate to a named support worker or clinician, with every state change written to an audit trail. It is not a diagnostic tool, not a chatbot, and does not use AI/ML in any clinical-safety-relevant path.
Domain 1
Clinical safety
Standards followed
DCB0129 Partial
Manufacturer clinical risk management. Implemented in principle: a maintained hazard log with live monitoring evidence exists inside the product and is exposed to authorised staff as a clinical safety evidence screen. Not yet formally signed off by an independent Clinical Safety Officer against the full DCB0129 standard.
DCB0160 Deploying org's responsibility
Deploying organisation's clinical risk management. Out of Holdfast's control as a manufacturer - this is the responsibility of each NHS Trust/ICB deploying Holdfast into their care pathway. Holdfast's hazard log is designed to be the evidence base a deploying organisation's DCB0160 process would consume.
How risk is assessed
Every check-in is scored by a single, pure, deterministic scoring engine - no machine learning, no black-box model, no probabilistic judgement of any kind. Each point on the score traces to a named rule surfaced alongside the score, so a Clinical Safety Officer or clinician can read and challenge the reasoning on the same screen as the result. This scoring engine is treated as the single highest-risk piece of logic in the product and is held to a correspondingly high automated test-coverage bar (a minimum 90% branch-coverage target).
- Scores map to RED / AMBER / GREEN.
- RED, or disclosure of self-harm ideation on a standard NHS questionnaire item, auto-raises an escalation with a service-configurable response deadline (e.g. 4 hours) and notifies the patient's named support worker.
- Free-text answers are pattern-matched for concerning keywords and floor the result to AMBER for human review - the system deliberately does not attempt to interpret free text itself.
- If a response deadline is not met, the escalation is flagged as breached and the assigned worker plus every tenant administrator are re-notified.
- Patients who stop checking in are not treated as "no news" - an engagement-status monitor auto-raises a review escalation for a disengaged patient with a prior amber/red history.
- A second, equally deterministic layer looks across a patient's history rather than at one check-in in isolation - a falling mood trend over several check-ins, repeated amber results, risk-to-self reported on consecutive check-ins, or a PHQ-9/GAD-7 score climbing between administrations. Each pattern is a named, explainable rule; the more serious ones auto-raise an escalation, the rest annotate the caseload. This catches the slow slide toward crisis that no single check-in would flag.
Hazard log (current, live in the product)
Eleven hazards are formally logged with cause, effect, existing controls, and an initial/residual risk rating, each backed by a live evidence query against production data - not static claims.
| ID | Hazard | Initial → residual risk |
|---|---|---|
| HAZ-01 | Deterioration missed because a check-in is scored too low | HIGH → MEDIUM |
| HAZ-02 | Escalation raised but not acted on in time | HIGH → MEDIUM |
| HAZ-03 | Escalation notification fails to reach the named worker | MEDIUM → LOW |
| HAZ-04 | Patient disengages and the silence goes unnoticed | HIGH → MEDIUM |
| HAZ-05 | Patient data seen by the wrong organisation or team | HIGH → LOW |
| HAZ-06 | Unauthorised access to the clinical system | MEDIUM → LOW |
| HAZ-07 | Patient in crisis relies on the app instead of seeking urgent help | HIGH → MEDIUM |
| HAZ-08 | Slow deterioration missed because each check-in is scored in isolation | HIGH → MEDIUM |
| HAZ-09 | Alert fatigue from the longitudinal rules blunts response to genuine risk | MEDIUM → LOW |
| HAZ-10 | Patient treats a worker-to-patient note as a monitored, replyable channel | MEDIUM → LOW |
| HAZ-11 | Self-management nudge is read as the service's response to a disclosure | MEDIUM → LOW |
Every hazard entry is maintained alongside the software that implements its controls, so the hazard log cannot silently drift out of date with the shipped behaviour - a change to the scoring rules or the escalation/monitoring logic is expected to update the corresponding hazard entry in the same change.
Crisis safety
If a patient discloses any level of risk-to-self, crisis signposting (NHS 111 option 2, Samaritans 116 123, Shout 85258, 999) is shown immediately on selecting the answer, before submission - in case the form is abandoned - and repeated on the confirmation screen and persistently on the patient's home page. The wording is deliberately written to never promise real-time monitoring or an immediate clinical response, since the service reviews escalations within working arrangements, not 24/7. Each patient also has an optional personalised safety plan (warning signs, coping strategies, personal/professional contacts) visible to them at all times.
Optional patient-facing features, off by default
Two features that change what a patient sees are each an explicit per-ICB opt-in, disabled until a trust reviews and enables them - so an assessor sees exactly what is active for a given deployment. Worker-to-patient notes let a support worker send a patient a short message from a Clinical-Safety-Officer-approved template only - never free text, no reply path, and every message ends with a fixed line stating it is not monitored and pointing to NHS 111 option 2, Samaritans and 999. Self-management nudges match patterns in recent check-ins (poor sleep, anxiety, loneliness) to established NHS self-help resources; they are withheld entirely whenever the patient has an open escalation, so a deteriorating patient is routed to a person, not a link. Both are covered by hazards HAZ-10 and HAZ-11 above.
Clinical coverage and instruments
Pathways: general mental health, ADHD (adult/child), autism, eating disorder, perinatal, older adult, trauma. Instruments: a bespoke 4-item check-in, PHQ-9, GAD-7, CORE-10, WSAS, AUDIT-C, EPDS, ASRS-v1.1, AQ-10, SNAP-IV 26, 6-CIT, GDS-15, TSQ, PCL-5, DAST-10 - all standard NHS-used measures. Two children-and-young-people instruments (RCADS and SDQ) are deliberately not embedded yet, because correct use requires the publisher's official norm tables and, for SDQ, a licence - both need to be sourced formally during clinical-safety review rather than reconstructed from memory, since a mis-worded or mis-normed instrument for children would itself be a clinical hazard. An interim advisory control (an under-16 age gate on the adult PHQ-9/GAD-7 cadence) is in place until those instruments are properly sourced.
Known gaps: no independent DCB0129 clinical safety case sign-off yet; no live/24-hour clinical response (escalations are reviewed within working arrangements, not continuously monitored); RCADS/SDQ deliberately deferred pending licensing.
Domain 2
Data protection
Data processed
Patient-identifiable data: name, NHS number (encrypted, see below), contact details, referral pathway, check-in responses (including self-harm disclosures), PROM/screener scores, risk scores and reasons, safety plan content, and an audit trail of all the above. This is special category health data under UK GDPR Article 9.
Multi-tenancy and data separation
- One shared database, application-layer isolation. There is no database-per-tenant and no database-enforced row-level security at this stage of maturity - that is an explicitly deferred, documented scope decision. Every record holding patient/case data carries a tenant identifier, resolved from verified login credentials only - never a value supplied by the browser - and every query the software runs is scoped to that tenant.
- A dedicated automated test suite exists specifically to assert that one NHS organisational unit's login can never read another's data. The realistic failure mode for cross-tenant data leakage is a defect in that application-level scoping logic, not a hypothetical infrastructure-level bypass - this is disclosed as a known design tradeoff, not hidden.
- The organisational (Trust/customer) boundary is hard and permanent - no role in the system, however senior, can cross it. The boundary between the statutory NHS bodies (ICBs) a single Trust may administer is softer and switchable, but only for Trust-wide staff roles, and only after the system verifies server-side that the person is actually a member of the ICB they're switching to.
- Commissioners see aggregate reports only, never individual patient records - reflecting that commissioners are not part of the direct-care team.
Encryption
- In transit: TLS is enforced everywhere in the deployed environment - the content-delivery layer redirects HTTP to HTTPS, and the application's load balancer terminates TLS with a managed certificate and redirects any plaintext HTTP request to HTTPS; nothing is ever served over plaintext HTTP.
- At rest: the database's storage volume is encrypted with a managed encryption key; object storage uses provider-managed encryption; the secrets store encrypts all secret values it holds.
- Field-level encryption for the two highest-sensitivity identifiers: NHS number and phone number are AES-256 encrypted at the application layer with keys held in a dedicated secrets store, independent of the underlying database-level encryption - only the last 3 digits of an NHS number are ever decrypted for on-screen display.
Data residency
All infrastructure deploys to a single UK region (London) only - UK-only data residency for every component that holds patient data. The content-delivery network and the account-wide security audit trail are the only components with any global/multi-region footprint (CDN edge caching and a multi-region activity log respectively); no patient data is held outside the UK.
Consent and information governance
- Patient consent (digital monitoring, data sharing) is captured as versioned, withdrawable records with an onboarding gate before a patient's first check-in, and every consent action is audited.
- Optional protected-characteristics fields (ethnicity, gender, age band) for equity reporting aligned to the NHS's Patient and Carer Race Equality Framework (PCREF) are gated behind a separate, explicit consent type and a per-organisation feature flag defaulted off - a Trust never encounters the feature, or the associated Data Protection Impact Assessment obligation, until it explicitly opts in. Reports built from this data apply NHS-convention small-number suppression (any group under 5 people is withheld rather than shown as a re-identifying small count).
- Every check-in, escalation, notification, and record change is written to an immutable audit log capturing the organisation, the ICB (where applicable), the acting user, the action taken, the affected record, supporting detail, and a timestamp - the basis for answering "who knew what, when" for any incident or subject access request.
Data Protection Impact Assessment (DPIA) Outstanding as standalone doc
A full standalone DPIA has been produced separately (available on request) and covers lawful basis, individual rights, and a scored risk register in detail. The controls summarised above constitute the technical/organisational measures that DPIA documents; a Trust/ICB procuring Holdfast should expect to complete its own local DPIA covering the specific deployment, data-sharing agreement, and retention schedule agreed with Holdfast as data processor.
Known gaps: no formal Data Sharing Agreement (DSA) template published alongside this assessment - expected to be agreed per-Trust at contracting stage; no confirmed retention/deletion policy period documented for patient data beyond "for the duration of the commissioning relationship" - needs a concrete retention schedule before production go-live.
Domain 3
Technical security
Authentication and access control
- Authentication is provider-abstracted: the software supports a real managed identity provider in deployed environments, with a separate, clearly-labelled local-only mechanism used purely for development and demonstration purposes. Route-level access logic is written against a single interface and never knows which provider is actually authenticating a given request.
- Staff authentication uses a managed identity provider with a Secure Remote Password authentication flow and a 12-character minimum password policy. In the production-shaped configuration: multi-factor authentication is required (an authenticator app for staff, SMS for patients) and advanced identity-protection features (compromised-credential blocking, adaptive authentication) are enforced. The current cost-optimised demo environment deliberately runs with multi-factor authentication and advanced protection switched off to keep the disposable test environment cheap and simple to reset - this distinction is explicit and must be confirmed with any assessor testing a specific deployment, since it materially changes the account-takeover risk profile of what they're looking at.
- Role-based access control: support worker, clinician, administrator, commissioner, clinical safety officer, patient, and carer roles - each scoped to their own caseload/team/organisation on the server side, not just hidden in the interface.
- Token revocation on deactivation: a deactivated staff account's still-valid login session is rejected on the very next request, not just at its natural expiry.
- Rate limiting: a per-IP request limiter protects login and session-establishment endpoints; in the production-shaped configuration this is additionally backed by a managed web application firewall rate-based rule in front of the public-facing API.
- Login/security telemetry: every login success, failure, and rate-limit event is recorded and surfaced on an in-app security status screen for administrator and clinical safety officer roles.
Infrastructure security
- Cloud provider and region: AWS, deployed entirely within a single UK region (London) - UK-only data residency for every patient-data-holding component.
- Network: the deployed network uses no internet gateway for outbound traffic from the private compute tier (a deliberate cost-optimisation for the current demo footprint); access control is enforced by fine-grained network security group rules rather than subnet-level isolation alone - the database only ever accepts connections from the application's own compute tier on its database port, and the application's compute tier only ever accepts connections from the public load balancer. The database is not directly reachable from the internet under any configuration tested.
- Compute: the API runs as a managed, serverless container service behind an internet-facing load balancer terminating TLS with a managed certificate (HTTP is redirected to HTTPS, never served in plaintext). The web application is a static single-page app served from private object storage via a content-delivery network, with no public access to the underlying storage bucket itself.
- Secrets management: the session-signing key, the NHS-number and phone-number encryption keys, and database credentials are all held in a dedicated managed secrets store and injected into the running application at start-up by a narrowly-scoped deployment role - never embedded in source code, container images, or plain configuration files.
- Identity and access management: a least-privilege split is enforced between the role that deploys and starts the application (image pull, log write, secret fetch) and the role the running application itself holds (a small set of scoped identity-provider administrative actions and outbound notification permissions only - no direct secret-store access, since secrets are already resolved before the application starts).
- Optional evidence layer: an additional, separately-deployable set of account-wide security services - a multi-region audit trail (one year retention), continuous automated threat detection, and configuration-compliance rule evaluation (checking, for example, that the audit trail stays enabled, that privileged accounts have multi-factor authentication, and that no storage bucket is publicly readable) - exists and can be switched on for any environment, but is not currently deployed in the disposable demo environment, where it is off the critical path.
Application-layer security practices
The codebase this product is built from is held to an internal security standard modelled on the OWASP Top 10 and equivalent guidance for AI/agent-adjacent tooling, covering: no hard-coded secrets (all secrets are environment-injected, with secret-scanning expected in the development workflow), least-privilege service accounts, parameterised database queries via an object-relational mapping layer (no raw string-concatenated SQL), a mandatory vulnerability/licence/provenance gate before any new third-party software dependency is introduced, and a documented incident-response and audit-logging expectation.
Disaster recovery and business continuity
A disaster recovery plan exists and is kept current alongside the system it describes, covering scenarios from application data loss through to a region-wide cloud outage. The current MVP demo environment has basic, cloud-provider-native recovery capability - a daily automated database backup (1-day retention) and a fully reproducible compute/network/frontend layer that can be rebuilt from source at any time - but no automated disaster-recovery tooling, no multi-availability-zone database redundancy, no cross-region resilience, and no formally committed recovery-time/recovery-point service level at this stage. This is a deliberate, documented scope decision for a pre-production, single-tenant demo environment holding no live patient-safety dependency, with a concrete backlog already scoped for reaching production-grade disaster recovery - the two highest-priority items being extending backup retention with point-in-time recovery, and changing the database's deletion posture so an accidental infrastructure teardown cannot delete production data. Both are small, low-risk changes intended to land before any live Trust/ICB relies on the platform.
Penetration testing and formal certification
Not yet independently penetration tested. A dedicated architecture briefing document for a future penetration tester or assessor exists, but no independent test has been completed as of this document's date. No Cyber Essentials Plus certification held yet. No NHS DSPT (Data Security and Protection Toolkit) submission has been completed.
Known gaps: the current demo deployment deliberately runs with multi-factor authentication off, no web application firewall, no advanced identity protection, and SMS verification codes logged rather than sent - appropriate only for a disposable test environment. This must be switched to the production-shaped configuration before any production/live-patient deployment. Single-availability-zone database, 1-day backup retention, no point-in-time recovery in the current environment. No independent penetration test, Cyber Essentials Plus certification, or DSPT submission completed to date.
Domain 4
Interoperability
- Referral ingestion: currently manual/staff-entered, with a triage queue designed so that a future automated national referral-system feed (e.g. MESH or the NHS e-Referral Service) and today's manual staff review converge on the same accept/reject workflow. No live integration with a national referral system exists yet - explicitly deferred at this stage.
- No FHIR/HL7 interface implemented. Integration with national clinical data platforms (such as AWS HealthLake or an equivalent FHIR-based store) is explicitly out of scope for this stage; Holdfast today does not exchange structured clinical data with an electronic health record system.
- Identity federation: no NHS login or NHS Care Identity Service 2 (CIS2) federation yet - staff and patient accounts are provisioned directly in Holdfast's own identity provider, scoped per organisation.
- Data export: a commissioner-facing CSV export of aggregate reports exists for offline analysis and reporting into other systems.
- API shape: a single documented internal API - not yet published as an external integration surface, since there is no external system Holdfast currently needs to interoperate with at this stage of scope.
Assessment: Holdfast is, by design, a standalone operational tool at this stage of maturity - it does not yet interoperate with NHS national systems (e-Referral Service, MESH, NHS login, FHIR/HealthLake). This is a known, deliberate scope decision for the MVP, not an oversight, and is the most significant gap against a full DTAC interoperability score today.
Domain 5
Usability and accessibility
- Design system: an NHS-brand-aligned interface built specifically to keep patient interactions to about one minute per check-in.
- Accessibility: the patient-facing and sign-in screens have had a dedicated screen-reader and keyboard-access pass - a skip-to-content link, the page name announced and focus moved on every navigation, programmatically labelled form fields, the rating scales exposed as keyboard-navigable ARIA radio groups, an error summary that is announced on submit and links straight to each field, status and error messages in live regions, a page language that follows the language switcher, and reduced-motion support. This is a WCAG 2.1-informed build pass - not yet independently audited or formally certified against a specific conformance level.
- Language support: Welsh language support is built into the product's translation infrastructure. The language switcher is currently enabled in the demo environment specifically for translation review purposes, not because full clinical sign-off on the translated content has occurred yet - this distinction is recorded and must be checked before relying on the Welsh content clinically.
- Patient experience: patients never see risk scores, ratings, or clinical categories - only a simple check-in flow and, where relevant, immediate crisis signposting. This is a deliberate usability/safety decision, not a missing feature.
- Mobile: a mobile app exists alongside the primary web app (check-in flow, multi-factor login, jailbreak/root detection) as a stretch/optional component of the current build.
Known gaps: no independent WCAG conformance audit/certificate; Welsh translations are in review, not yet clinically signed off, in the current demo build.
Summary for assessors
Where each domain stands today
| DTAC domain | Current state |
|---|---|
| Clinical safety | Strong technical foundation (deterministic scoring, live hazard-log evidence, crisis signposting) - independent DCB0129 sign-off outstanding. |
| Data protection | Strong technical controls (tenant/ICB isolation, field-level encryption, UK-only residency, audit trail, consent capture) - standalone DPIA and formal retention schedule outstanding. |
| Technical security | Strong architecture for a demo-stage product (least-privilege access, encrypted secrets, TLS everywhere, MFA-capable) - currently running in a deliberately weakened demo configuration; no independent pen test/Cyber Essentials Plus/DSPT yet. |
| Interoperability | Weakest domain today - no live NHS system integration (e-Referral Service/MESH/NHS login/FHIR), by deliberate MVP scope decision. |
| Usability & accessibility | Strong design intent plus a shipped screen-reader and keyboard-access pass on the patient and sign-in screens (WCAG 2.1-informed, NHS branding, minimal patient friction) - no independent accessibility certification yet. |
This assessment should be re-issued whenever a material change lands in any of the five domains - in particular, before submission to any NHS procurement process, confirm which deployment configuration (cost-optimised demo vs. production-shaped) the target environment actually runs, since several controls described above are configuration-dependent.