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 Not in this demo
Recognises text in scanned pages so they can be searched and reviewed.
Available, but disabled for interactive use here: recognition takes seconds per page on demonstration hardware.
- 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 and hashes, carries no case content, and has no foreign key to the case so that it outlives it. Afterwards the council can still show who deleted what and when, and cannot show what it said. 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.
Tamper evident, not tamper proof: someone with database write access could recompute the chain, and the product says so.
- AI governance and opt-out Available
The assurance tier can be switched off per tenant or per case; 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 Planned
Sign in with the council's own directory.
Planned. The service authenticates through OpenID Connect; binding it to a specific Entra tenant is configuration, not development.
- User and role administration Not in this demo
Create users, assign roles, and review permission changes.
Switched off in this demonstration, which ships with four fixed accounts covering the roles.
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 Not in this demo
A second opinion over the already-redacted rendition, returning findings for a human rather than edits to a document.
Switched off in this demonstration: no model credentials are configured, and the deterministic tier is a complete product on its own.
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.