Help
Working a request end to end
- Open a case
Record the request, the requester and the date of receipt. If identity has to be confirmed, the statutory month runs from confirmation rather than from receipt.
- Add the material
Drop files in. Type is read from the content, not the filename. Office formats are converted; everything is hashed on arrival and the original is never altered.
- Clear the concealed-content queue
Tracked changes, comments, hidden worksheets, invisible text and off-page content are surfaced here. Release is refused until each has been considered.
- Build the Party Register
Name the people in the case and set each one’s role and capacity. Confirm the ways their name appears; confirmed forms are then matched identically across every document.
- Review
Work through the candidates with J and K. Each shows why it fired. Choose a statutory basis before accepting — for a third-party ground the three-step test is recorded step by step.
- Release
Pre-flight shows what is still blocking. Production burns the accepted redactions, verifies the finished bundle by independent paths, and issues a download only if every check holds.
Keyboard
The review loop is operable entirely from the keyboard.
- Jnext candidate
- Kprevious candidate
- [previous page
- ]next page
- 1original
- 2marked
- 3as delivered
What this build does, and does not
Three states, from one register. Enterprise is used only where a capability exists in the product and is switched off here. Anything not yet built says Planned — we would rather say so here than have it found at due diligence.
Casework
- Case intake and statutory clock Available
Records receipt, identity confirmation, extensions and clarification, and computes the statutory deadline.
Implements the corresponding-date rule with its short-month fallback, weekend and bank-holiday roll-forward, and the distinction between clarification of scope (which stops the clock) and of response format (which does not).
- Party Register Available
Names every individual in the case with their role and capacity, and drives consistent treatment across the whole pack.
Capacity is held separately from role because the professional exemption turns on official capacity, not job title.
- Freedom of Information policy pack Planned
The same machinery against the FOIA exemption set.
Planned. Policy packs are data, so this is a new pack rather than a new product.
Ingest
- Mixed-format ingest Available
PDF, Word, Excel, PowerPoint, OpenDocument, images and plain text, identified by content rather than by filename.
Office formats are converted by LibreOffice; pagination may differ from the originating application, and Bates numbering governs the bundle.
- Concealed content discovery Available
Finds content a reviewer could not see on screen and puts it in its own queue, naming the mechanism that concealed it.
Covers optional-content layers that are off, white-on-white text, zero-size text, off-page content, annotations, tracked changes, comments, vanished runs, document properties, hidden worksheets, hidden rows and columns, and pivot caches.
- OCR for scanned records Planned
Recognising text in scanned pages so they can be searched and reviewed.
Planned. The recognition engine is already in the product and runs on every release, where it reads the rendered pixels to prove a redaction really removed what it covered. Attaching a recognised text layer to a scanned page at ingest, so a reviewer can search it, is not yet built: pages with no text layer are surfaced for manual review instead.
- Handwriting recognition Planned
Cursive and handwritten contact notes.
Planned. No open-source engine reads unconstrained handwriting usefully; this requires a cloud service with UK data residency, and until it is built handwritten pages route to a manual review queue.
Governance
- Tenant isolation enforced by the database Available
Each licensed organisation's data is separated by PostgreSQL row-level security, not by application code remembering to filter.
Every tenant-scoped table carries its own tenant identifier and a policy with both USING and WITH CHECK, under ENABLE and FORCE ROW LEVEL SECURITY. The service connects as a role that owns nothing and holds neither BYPASSRLS nor superuser, and the tenant is set per transaction with SET LOCAL, so it cannot survive onto the next request that borrows the connection. With no tenant established every policy predicate is NULL and nothing qualifies -- it fails closed. A query that forgets its WHERE clause returns nothing rather than somebody else's case.
- Irretrievable erasure with a surviving audit trail Available
Deleting a case destroys its content and its files on disk, and leaves the record that the deletion happened.
Erasure and auditability pull against each other, and the resolution is that they hold different things. The audit trail keeps metadata, hashes and a narrative of what was done, and has no foreign key to the case so that it outlives it. Its entries CAN name the data subject and third parties -- a case entry reads "Confirmed 'C. Rothwell' as a form of ..." -- and those fields are withheld from any caller who does not hold case-content permission. Afterwards the council can show who deleted what and when. Restricted to an approver; a reviewer is refused.
- Hash-chained audit trail Available
Records reads as well as writes, and detects alteration or removal of a historic entry.
Each entry is hash-chained to its predecessor, so altering or removing a historic one invalidates every hash after it and the verifier names the sequence where the break begins. The verifier is itself tested by corrupting an entry and requiring it to report the break -- an integrity check that has only ever shown green is not evidence of anything.
- AI governance and opt-out Available
The assurance tier can be switched off per tenant; the system still completes a case without it.
Every egress is logged with provider, model, region, purpose and the redaction state of the content when it was sent.
- Microsoft Entra single sign-on Available
Sign in with your own organisation's Microsoft directory.
Authorization code with PKCE, state and nonce; the token's signature, issuer, audience, expiry and nonce are all checked against the signing keys of the directory that issued it. Which Vellum tenant a person belongs to is decided by that directory and never by their email address -- an address proves nothing about who issued the token -- and an operator sets the mapping, so a sign-in can never create one. Personal Microsoft accounts are refused three separate ways. Accounts are never provisioned automatically: a directory identity with no account is refused and told who to contact, because a directory holds everyone who works somewhere and these are case files.
- User and role administration Available
Adding people, changing their roles, switching an account off and removing it, from inside the product.
GET/POST /api/members, PATCH and DELETE /api/members/{email}, all gated on user_manage, which only the administration role holds -- and that role holds no case-content permission, so the person who manages accounts cannot read case files. Roles come from the council's own authorisation namespace rather than a list compiled into the product. Every change ends the target's sessions and invalidates their cached permissions, because a changed role with a live cookie is not a changed role. A change that would leave the council with nobody who can sign in and manage accounts is refused, since there is no way back through the product. Removal takes away the membership and keeps the identity, so a consultant working two authorities is not erased from both; re-adding them restores access with a new passphrase.
Review
- Detection with stated evidence Available
Every candidate carries the detector, its version, and the rule or checksum that caused it to fire.
Confidence is shown as one of three bands with a stated evidential basis, not as a percentage we cannot calibrate.
- Consistent entities across the pack Available
A name confirmed once is applied identically to every document, and the result is reproducible byte for byte.
Similarity proposes aliases for a human to confirm; only confirmed forms are applied.
- ICO three-step third-party test Available
Records each step and each factor weighed, not only the conclusion.
A record of the conclusion alone is not a defensible record of a balancing exercise.
- LLM assurance tier Available
A second opinion over the already-redacted rendition, returning findings for a human rather than edits to a document.
Runs after the deterministic tier, over the rendition as it would be released, and is measured by what it CATCHES rather than by what it changes -- it cannot edit a document, and a finding it raises is a candidate an officer still has to decide. Every run carries its own control: a known-positive document with planted items it must find, and a planted instruction it must refuse to follow, both reported with the run. A run whose control did not hold is marked as such rather than presented as a clean result. Findings are anchored verbatim to the text at their offsets, so one that quotes something the document does not contain is discarded rather than shown. It can be switched off per tenant, and a case reaches a verified bundle without it.
Release
- Falsifiable release verification Available
Checks the finished bundle by independent paths, after first proving the checks can fail on deliberately dirty controls.
A suite that has never produced a positive is not evidence of a negative.
- PDF/A-2b output with validation Planned
Archival-format bundles validated before release.
Planned. PDF/A-2b rather than 3b, because PDF/A-3 permits arbitrary embedded attachments.
- Vector-mode redaction Planned
Removing text from the content stream while keeping the page vector.
Planned. Current output rasterises only the pages carrying a redaction, which is provably irreversible; vector mode is a fidelity improvement, not a correctness one.
Statutory grounds
This pack is a starting position for your data protection officer to review, amend and version. Vellum does not advise on the law.
- Rights and freedoms of others redact three-step required
UK GDPR Article 15(4)
The right to obtain a copy must not adversely affect the rights and freedoms of others.
- Third-party personal data redact three-step required
DPA 2018 Sch. 2 Pt. 3 para 16
Disclosure would involve disclosing information relating to another identifiable individual, who has not consented and where disclosure without consent would not be reasonable.
- The requester's own personal data retain
UK GDPR Art. 15(1)
The requester is entitled to their own personal data, and most of what a subject access response contains IS their own personal data. It is retained. This is not an exemption at all -- it is the default -- but it belongs in the catalogue because every retained item needs a stated ground, and without one an officer reaches for the nearest retain code. The assisted adjudication tier did exactly that: with para 17 as the only retain ground available it justified the data subject's own name as a professional acting in an official capacity, which is the right answer under the wrong law.
- Professional acting in an official capacity retain
DPA 2018 Sch. 2 Pt. 3 para 17
Disclosure is to be considered reasonable where the other individual is a health, social work or education professional and the information relates to them, or was supplied by them, in an official capacity. The assumption is rebuttable, and it does not reach information about them personally.
- Health data — serious harm redact
DPA 2018 Sch. 3 Pt. 2
Health data whose disclosure would be likely to cause serious harm to the physical or mental health of any individual.
- Social work data — serious harm redact
DPA 2018 Sch. 3 Pt. 3
Social work data whose disclosure would prejudice the carrying out of social work because it would be likely to cause serious harm to the physical or mental health of any individual.
- Social work data — recorded expectation redact
DPA 2018 Sch. 3 Pt. 3
Social work data supplied on a recorded expectation that it would not be disclosed to the data subject.
- Education data — serious harm redact
DPA 2018 Sch. 3 Pt. 4
Education data whose disclosure would be likely to cause serious harm.
- Child abuse data redact
DPA 2018 Sch. 3 Pt. 5
Child abuse data whose disclosure would not be in the best interests of the data subject.
- Crime and taxation redact
DPA 2018 Sch. 2 Pt. 1 para 2
Disclosure would be likely to prejudice the prevention or detection of crime or the apprehension or prosecution of offenders.
- Legal professional privilege redact
DPA 2018 Sch. 2 Pt. 4 para 19
Information in respect of which a claim to legal professional privilege could be maintained.
- Not the requester's personal data redact
Out of scope
The information is not personal data relating to the requester, so the right of access does not extend to it.
- Outside the scope of the request redact
Out of scope
The information falls outside the scope the requester specified.
- Duplicate redact
Administrative
A duplicate of material disclosed elsewhere in this bundle.
The three-step test
- Does responding require disclosing information that identifies another person?
Consider whether the request can be complied with without revealing information that relates to and identifies another individual.
- Has the other person consented to disclosure?
If the third party has consented, the information must be disclosed.
- Is it reasonable to disclose without their consent?
Weigh each factor and record the reasoning, not only the conclusion.
- the type of information that would be disclosed
- any duty of confidentiality owed to the third party
- any steps taken to seek the third party's consent
- whether the third party is capable of giving consent
- any stated refusal of consent by the third party
Vellum records each step and each factor weighed, not only the conclusion. A record of the conclusion alone is not a defensible record of a balancing exercise.