commvita
Connected care platform
Security architecture

How commvita is secured: the controls, and the evidence for them

Role and organisation scope, step-up re-authentication for special-category records, break-glass with a recorded justification, a hash-chained audit re-verified when it’s read, and the toolkit and assessment-criteria evidence an assessor can take away.

Live vs demonstrated: Live — real, API-backed platform logic (wired end-to-end today) Demonstrated — representative control surface with seeded data / illustrative UI mock-up
© 2026 Commvita Digital Health Solutions Ltd. All rights reserved.

1 The three questions an assessor actually asks

An information governance lead doesn’t want a policy document. They want three things answered on screen, with the platform in front of them: who can reach this record, what has happened to it, and can you prove the record of what happened hasn’t been edited since. This is how commvita answers all three, and what an assessor can see for themselves.

Who can reach it

Role · organisation scope · expiry

A role decides what a person may do. Their organisation scope decides whose records they may do it to. The two are separate, and neither is inherited by accident: delegated scope and group membership carry an expiry, and an expired grant gives no access.

What happened to it

Access · mutation · account events

Every access and every change is written to the audit, and every authentication event is written to a separate account log with the source address, the country, the device and the result. Both are readable in the product by the people entitled to read them.

Can you prove it

Hash chain · re-verified on read

The account log is hash-chained, and the chain is recomputed over the whole log every time the log is opened. The page tells you the result. If a historic row had been altered, the verification would fail rather than the row simply looking normal.

What this page won’t do. It describes controls and the evidence for them. It doesn’t publish configuration. No environment settings, no token lifetimes, no cryptographic parameters, no map of the session endpoints. That detail belongs in a due diligence pack under an agreement, and a public web page is the wrong place for it. Where a screenshot would have shown it, I chose a different screenshot.

2 Role, organisation scope, and the reach that follows

Access is modelled as two independent things. The role is the capability. The organisation scope is the reach. A receptionist and a consultant in the same practice are separated by role; two consultants in different organisations are separated by scope. Getting one right doesn’t get you the other.

Role Access Reference screen showing all NHS and care roles mapped to commvita system roles, with an Export CSV button. A legend defines no access, read, read own record, read/write, full control, full own record and policy-driven. Category filters read Primary Care, ARRS, AHP, Community, Social Care, Workforce Ops, Governance, Leadership and Patient-Facing, with 49 of 49 roles shown. The matrix columns are patient demographics, clinical notes, sensitive diagnoses, medications view, meds prescribe, MH records, safeguarding and social care. Rows include GP with full demographics, full notes, policy-driven sensitive diagnoses and read safeguarding; GP receptionist with read/write demographics and no access to anything else; practice manager with full demographics and read on medications view and safeguarding; health care assistant with read on demographics and medications only.
Role Access Reference · role by data domainCaptured from the running system, build B-591 · live platform data

Every cell in that matrix is a decision somebody has to be able to defend. Sensitive diagnoses are policy-driven instead of a flat yes or no, which is the honest answer for a data class where the rule depends on the care relationship. A receptionist gets demographics and nothing else. A health care assistant reads, and doesn’t write. The matrix is served by the platform not typed into a slide, and it exports so that an assessor can take it away as evidence.

Underneath it, the scope rules matter as much as the roles. A user is attached to the organisations they work for. Cross-organisation reads need explicit permission instead of an accident of role. A team lead can inherit a colleague’s scope through a delegation, and that delegation expires. A user group grants scope and can never grant a role, so nobody gains capability by being added to a list.

3 Special-category records: step up, or break glass

Genomics, mental health, sexual health and safeguarding records are special category data under Article 9. Holding them behind the same login as an appointment list isn’t good enough, and two controls sit in front of them.

1

Step-up re-authentication

Before an Article 9 stream opens, the person re-enters their password and states why. The platform issues a short-lived elevation that downstream checks verify, and it expires on its own. The re-authentication itself is written to the audit with the reason given, so the elevation is evidence instead of a silent state.

Article 9 streamsRe-auth is audited
2

Break-glass, with a justification recorded first

Reaching a record outside normal scope requires a written justification before the record opens, not afterwards. The entry records who, which record, the justification and the time, and it’s flagged as break-glass so it can be counted. Frequent use raises an alert to the data protection officer instead of being absorbed.

/governance/auditbreak-glass flag
3

A second pair of eyes where the law asks for it

Some records carry more than a role check. Child protection enquiries require dual authorisation and a confidential label, with the access logged against a mandatory justification. The control follows the record class, not the person’s seniority.

SafeguardingDual authorisation

The design point behind all three: an emergency override that’s easy to use and impossible to hide is safer than one that’s hard to use. Clinicians will always need to reach a record they don’t normally hold. What matters is that reaching it costs a sentence of explanation and leaves a mark somebody reviews.

4 An audit that can’t be edited quietly

The audit log records every access and every mutation, with the actor, the action, the module, the resource and its identifier, the time, and the jurisdiction it happened in. It’s filterable by date, user, action and module, and it exports.

Audit Log screen with filters for date from, date to, user, action and module, and an Export button. The table has columns timestamp, user, action, module, resource, resource ID, IP address and jurisdiction. Rows show portal login events against patient records, a genomics access event recorded for a superadmin role against the genomics consents resource, create events on referrals and a case, and an assessment recorded event, each with a resource identifier. The footer of the page reads: DSP Toolkit compliant, tamper-evident log, minimum seven-year retention, every access and mutation recorded.
Audit Log · every access and mutationCaptured from the running system, build B-591 · live platform data

Two things in that screenshot are worth naming. The third row is a genomics access event, recorded because a special-category resource was reached, with the role and access level captured alongside it. And the strip at the bottom states the retention position: a minimum seven-year retention, every access and mutation recorded, tamper-evident. Those are the claims an assessor will test, so they’re on the screen the assessor is looking at.

The account log is separate and stricter. It records one row for every authentication event: sign-in, failure, second-factor challenge and sign-out, with the username, the source address including the forwarded chain, the country the login came from, the device and the result. It’s append-only. There’s no endpoint that updates or deletes a row, because the way to make a log trustworthy is to build no path that could edit it. Reading it’s restricted to administrators.

Account Login Audit screen. A banner reads: platform data, every figure on this page is read from the platform, no seeded data is rendered here, organisation scope not scoped, these figures cover the whole deployment. The description states it is an immutable, append-only record of every authentication event with username, source IP including forwarded chain, country logged in from, device and result, hash-chained for tamper evidence, UK GDPR Article 30 and DSPT access monitoring. A green banner reads: hash chain verified, 179 login events intact and untampered. Below are a username filter, an event type selector, a refresh button and 179 shown, then a table with columns timestamp, username, result, source IP, country, device and detail or jurisdiction, listing successive Login OK events for the admin account.
Account Login Audit · chain verified on readCaptured from the running system, build B-591 · live platform data

The green line is the control. Each row is bound by a hash to the row before it, and the chain is recomputed across the whole log every single time the log is read. The page reports the result of that recomputation, not a stored flag saying it was fine once. That’s the difference between a log that claims to be tamper-evident and one that demonstrates it to the person reading it, in the second they read it.

5 Sessions end, and secrets stay on the server

Three controls that get less attention than they deserve, because none of them is visible until something goes wrong.

Sessions expire, and sign-out revokes

Bounded · revocable

A session is bounded in time and ends on its own. Signing out revokes that session’s credential for whatever remained of its life, and the revocation is checked on every subsequent request, not trusted to the browser having thrown the credential away. Elevation for special-category data is separate, shorter, and expires by itself.

Secrets never reach the browser

Server-side only

Integration credentials are held on the server. What a configuration screen receives is whether a credential is present, not the credential. Where a secret has to be shown at all it’s a last-four hint. There’s no screen and no response in the platform that returns a stored secret to a browser.

Exports are encrypted to the recipient

Not to a key we hold

A data export is encrypted with a fresh content key wrapped to the recipient’s own public key. commvita never holds the private half, so the artefact isn’t readable here either. If no recipient key is supplied the platform refuses to produce the export instead of falling back to plaintext or to a key it holds itself.

Why the export rule is written as a refusal. Encrypting an export to a key the platform also holds protects against almost nothing, and a silent downgrade is how an export everybody believes is encrypted turns out not to be. So the failure is loud: no recipient key, no export. A buyer can test that in a minute, which is why we built it that way.

6 Watching it in use

Controls stop things. They don’t tell you what is being attempted. The Security Console is the operational view: current threat level, active sessions and how many carry special-category scope, failed logins and lockouts, Article 9 access events, revoked credentials, and the platform’s position against the toolkit criteria.

Security Console SOC dashboard headed healthcare SOC, real-time threat monitoring, DSPT Criterion 7 of 9, GDPR Article 9 surveillance, NHS CSOC integration. An amber seeded demonstration data banner sits above six tabs: SOC dashboard, live event stream with 4, active sessions with 8, anomaly detection with 2, threat intelligence with 2, and incident response. A Level 2 Elevated Threat banner reads anomalies detected, increased monitoring, three active investigations underway, with selectable levels L1 to L4. Six tiles read active sessions 8 with 4 in Article 9 scope, failed logins in 24 hours 12 with 2 account lockouts, anomalies detected 4 with 2 active and 2 reviewing, Article 9 access events 3, DSPT compliance 94 percent at criterion 7, and 2 revoked tokens in the denylist.
Security Console · SOC dashboardCaptured from the running system, build B-591 · seeded demonstration data

The console carries its own amber banner saying it’s seeded demonstration data, and that’s accurate: this surface is illustrative today. What it demonstrates is the shape of the monitoring, and the shape is the part that’s specific to healthcare. A generic security tool flags a bulk download. It can’t tell you whether the person doing it’s on the care team.

Anomaly detection cards from the Security Console, each with a risk score ring, severity, state and DSPT criterion tag, and Investigate, Dismiss and Escalate buttons. Bulk Access, high, active, risk 87: 47 mental health records accessed in 8 minutes, 3.8 times above the 30-day baseline for this role, clinical context user is not assigned to the mental health care group. Off-Hours, medium, reviewing, risk 62: login outside normal working hours with genomics records accessed, clinical context on-call rota not populated for this date. New Location, high, active, risk 94: access from an overseas address, impossible travel from the previous login four hours earlier, clinical context staff member is on annual leave according to the workforce record. Privilege Escalation, medium, resolved, risk 45: an attempted role-change call with a superadmin payload, blocked by the access control layer. Article 9 Spike, medium, reviewing, risk 58: 23 sexual health records accessed in 15 minutes, 2.1 times baseline, clinical context user is assigned to the sexual health team.
Security Console · anomaly detection with clinical contextCaptured from the running system, build B-591 · seeded demonstration data

Read the clinical context line on each card. Bulk access to mental health records by someone not on that care team is a finding. The same access by the clinician who is on the team is a Tuesday. Off-hours access matters more when the on-call rota says nobody should be working. An overseas login matters more when the staff record says the person is on leave. Every one of those cross-references is a fact the platform already holds because it also runs the rota, the care team and the leave. That’s the argument for putting the monitoring inside the clinical system instead of shipping logs to something that has never heard of a care team.

7 The evidence pack, and the ceiling

Assurance in this market runs on two artefacts: the Data Security and Protection Toolkit, and the Digital Technology Assessment Criteria. Both are held in the platform as evidence with a status, not as a claim in a brochure.

The toolkit position is derived from the mandatory items for the organisation’s own category, and it distinguishes between an item that hasn’t been met and an item on which nothing has been recorded. Those are different facts and the platform reports them differently, because scoring an empty toolkit as a failure is a finding derived from no data. The assessment criteria are held per domain, each with its standard, whether it’s mandatory, its weight, the evidence text, who assessed it and when, and a weighted position over the mandatory set. The access matrix exports as evidence for the access-control criteria, and the account log answers the access-monitoring ones.

Now the ceiling, plainly. The audit, the account log with its chain verification, the role and scope model with its exports, the step-up re-authentication, the break-glass record, sign-out revocation, the server-side handling of credentials, the encrypted export and the toolkit and criteria evidence are all API-backed and working today. The Security Console and its anomaly stream are a demonstrated surface on seeded data, and the page says so on itself. The platform also holds an internal security architecture view with its threat model and a control-by-control posture including the gaps it’s closing. I haven’t screenshotted that view here and I won’t publish its detail on a public page. It goes to a prospective customer in a due diligence pack, with the gaps in it, because a supplier who shows you only the closed controls is telling you less than nothing.

Where it lives in commvita

CapabilityRouteModel / APIStatus
Role by data domain, with export/rbac-matrix · /rbacAPI /rbac/matrix · /rbac/export · policy scenarios● Live
Organisation scope, delegations and groups with expiry/rbacAPI /rbac/delegations · scope-only groups● Live
Step-up re-authentication for Article 9 recordsArticle 9 modulesPassword challenge, short-lived elevation, event written to the audit● Live
Second factor on the account/user-managementTime-based one-time code, per user, challenge on sign-in● Live
Break-glass with recorded justification/ig-hubAPI /governance/audit · break-glass flag · DPO alerting● Live
Immutable audit of access and mutation/auditAPI /audit · filters · export · seven-year retention● Live
Account login audit, chain re-verified on read/login-auditAppend-only, hash-chained, no update or delete path; administrator only● Live
Session expiry and sign-out revocationPlatform-wideBounded session, revocation checked on each request● Live
Credentials held server-sideConnector settingsPresence returned to the browser, never the secret; last-four hint only● Live
Encrypted export to the recipient’s keyExport pipelineContent key wrapped to the recipient; refuses without one● Live
Toolkit position and assertions/ig-hubAPI /ig/dspt/summary · assertions · category profile● Live
Assessment criteria evidence pack/dtacAPI /dtac/summary · per-domain status, weight, assessor, date● Live
Security operations console and anomaly stream/security-consoleIn-page seeded content; carries its own seeded-data banner☉ Demonstrated
Threat model and control posture view/security-architectureInternal assurance view; detail not published publicly☉ Demonstrated
It isn’t a security product. commvita isn’t a security product and makes no medical device claim. These are the controls around a clinical and social care record, and they’re decision support at most: an anomaly is raised for a named person to investigate, and a clinician or an information governance lead decides what happens next. Nothing here removes the need for the organisation’s own network, endpoint and identity controls, its own toolkit submission, or its own penetration testing. Non-SaMD.
© 2026 Commvita Digital Health Solutions Ltd. All rights reserved. NHS Data Security & Protection ToolkitDigital Technology Assessment Criteria (DTAC) UK GDPR Art. 5(1)(f) · Art. 9 · Art. 30NHS Cyber Security Strategy 2023–2030 Caldicott principlesNon-SaMD