Back to the Information Governance Pack

Data protection

Data Flow and Data Handling Summary

v3.49
Updated Oct 2026 · Reviewed Jun 2026 · Next review Jun 2027

Owner: Andrew James (CEO)

For school IT leads and Data Protection / Designated Safeguarding Leads

Overview

Halved is an always available learning support system that brings expert guidance to every student at the exact moment they need it. This document describes what data Halved collects, where it is stored, how it is processed, and how it is protected. It is intended to support your school’s data protection assessment and due diligence process.

Student personal data is stored in the United Kingdom. Processing takes place in the United Kingdom, with one exception and three qualifications, each stated here rather than in a footnote, because a footnote does not cure a headline that has become untrue. The exception: AI inference for the chat function is performed by the Azure OpenAI Service in Microsoft Azure Sweden Central, a single European Union member state covered by UK adequacy regulations, on a regional deployment type that keeps processing within that region. Everything else remains in Azure UK South, including the description of the page a student is working on, the processing of documents a student or a teacher uploads, voice, handwriting recognition, content safety screening, safeguarding escalation, malware scanning and document conversion (section 3). The three qualifications: Microsoft’s abuse monitoring of the two Azure OpenAI resources, which may retain content flagged by automated checks for review by Microsoft staff, located in the European Economic Area for the Sweden Central resource and in a location Microsoft does not publish for the UK South resource (section 3); Microsoft Defender for Storage, which may share file metadata outside the region it scans in (section 8, and the Sub-processor Register); and Halved’s own administrative access to production, which is exercised by named officers of Halved Limited from the United Arab Emirates (sections 3 and 4). Each is set out where it arises.

Data Flow Diagram

Architecture diagram. Students and staff connect over HTTPS to an application tier in Azure UK South holding the web app, the AI backend and the cognitive engine. Chat replies are worked out by an Azure OpenAI resource in a zone of its own, Azure Sweden Central, the only zone outside the United Kingdom. Every other zone is in the United Kingdom: the Azure AI services in UK South that describe pages, read documents, recognise handwriting, convert voice and screen content; the data stores, being PostgreSQL, Redis, Blob storage with Defender for Storage, and a document converter; MongoDB Atlas; email and the safeguarding escalation workflow; and platform operations, being Key Vault and Log Analytics. Alerts go to the school's safeguarding lead, and operational alerts to Halved. The upload path and the safeguarding decisions are shown as references to separate flowcharts.

Full-size diagram: https://governance.halved.io/diagrams/Cloud_Architecture_Diagram.svg

The Halved platform architecture and data flow, showing how data moves from staff and students through the application tier to the Azure AI services and data stores. Every zone is in the United Kingdom except the Azure OpenAI resource that works out chat replies, which is in Azure Sweden Central. That route is the only one on which student data leaves the United Kingdom. The picture names each part and what passes between them; the sections below carry the detail.

Safeguarding Decision Flowchart

Safeguarding flowchart. Text from a chat message, a student's answer sheet, recognised handwriting or a student's upload is normalised and passed through an English keyword net and disclosure patterns. Only a high-severity escalating match skips Azure AI Content Safety; everything else, acceptable use included, is read by Content Safety, which reads the original text and then a de-obfuscated variant, and the result decides whether there is a disclosure at the safeguarding lead's threshold. A disclosure writes a flag and an acceptable-use record beside it, and the lead is emailed for a disclosure from low severity and for other concerns from medium, with a repeat within 30 minutes not emailed again; in chat a high-severity concern withholds Halved's reply and shows a crisis line, and a lower one keeps the reply and adds the line. An acceptable-use match with no disclosure is recorded and never emailed, and in chat the request is declined. When Content Safety does not answer: a chat message that timed out stops the turn and the student is asked to send it again, and the message is recorded and queued; an error lets the turn, save or upload go ahead, recorded for review with no content and the text queued; handwriting is refused and not queued; a queue write that fails alerts Halved and the text is never checked again. Every five minutes, once a probe shows Content Safety answering, queued text is checked again from the top, oldest first: a concern found late is flagged and emailed as if live, with the delay stated and never merged with other alerts; acceptable use found late is recorded and not emailed; a concern found late in Halved's own reply alerts Halved, not the school; if nothing is found the text is deleted; after 50 failed checks while the service is up it is deleted unread and Halved is alerted. Separate branches screen the composited page image when a student asks Halved about the page they are working on, and screen Halved's own reply: a flagged reply alerts Halved and never the school, high severity withholds it, a timeout withholds it and asks the student to ask again, and an error delivers it and holds it for the later check. Every live step runs before the reply is sent; only the repeat check runs later.

Full-size diagram: https://governance.halved.io/diagrams/Safeguarding_Decision_Flowchart.svg

How student text is checked, whether it is typed in chat, written into a piece of work, recognised from handwriting or extracted from an upload: keyword detection, then Azure AI Content Safety, then a division between a disclosure escalated to the school’s Designated Safeguarding Lead and an acceptable-use match that is recorded and, in chat, declined. The check runs as the text arrives, before the reply is sent, except where Content Safety cannot complete it; section 5, under “When a check cannot be completed”, sets out what happens then, including the repeat check that reads the text later.

Upload Safety Path

Upload safety flowchart. A file a student or a teacher uploads is checked for type and size, written to the student-uploads container and recorded as awaiting a scan. Microsoft Defender for Storage scans every file and writes its verdict as a blob index tag; the malware gate runs where Defender is configured, as it is in production. A teacher's marking ink never has its verdict read and is delivered whatever the scan found. A student's upload is polled for its verdict every 20 seconds, up to 30 times. A malicious file is recorded as infected, withheld from every reader and raises an IT security alert to Halved, with no safeguarding flag; no verdict within ten minutes, or an unrecognised one, blocks the file; a file that is missing or cannot be read is blocked. A clean file is released to content screening, and an unsupported type is blocked. A PDF, PowerPoint or Word document, Word converted first, has its text extracted and screened; its page images are not moderated. If every chunk is screened it becomes the student's material, with one email to the safeguarding lead at chat's thresholds and acceptable use recorded, not emailed. Chunks whose check errored are recorded and queued and the file is delivered; screening that is not configured blocks the upload and queues nothing; screening that fails outright blocks the upload and queues its text. A photograph or submitted ink is moderated as an image first: flagged content writes a flag and escalates with metadata only, and the file is blocked, though the lead can open it; moderation that is unavailable blocks it and queues nothing. Otherwise Azure AI Vision Read extracts its text and retains nothing, recognition that is unavailable blocks it, and recognised text is chunked and screened as a document's is and becomes one-page material on the same terms. A teacher's lesson material does not take this path and is not screened.

Full-size diagram: https://governance.halved.io/diagrams/Upload_Safety_Path.svg

What happens to a file after it is written to Blob storage: malware scanning by Microsoft Defender for Storage, the split between a student’s upload and a member of staff’s marking ink, polling for the scan verdict, content screening, text recognition, and the outcomes each path reaches, including when a screening service is unavailable. A teacher’s lesson material is uploaded by a different route and is not screened.

1. What data Halved holds about students

When a student account is created, Halved stores:

The student identifier is a reference, not a credential. Knowing an identifier grants no access. All access is authenticated and scoped server-side to the authorised user and their school.

Roster ingestion. Student and staff records reach Halved in three ways: Halved imports a school’s roster from a spreadsheet; a school’s Halved lead can enter the school’s staff, classes and students at my.halved.io/intake, and Halved imports them; and a School Admin can create accounts directly in my.halved.io. Whichever way a record arrives, what Halved receives and retains differs by whether names are included. Without names: Halved receives identifiers and minimal account fields only; this is the default and the cleanest. With names: any full names received are stripped on receipt and not persisted on the Halved side, leaving only the identifier, email and, by default, first name. Halved never holds a student’s surname. Account creation is always performed by Halved or by a school’s staff; students do not self-register.

The school intake. Once a school’s data processing agreement is signed, Halved creates one account for the school’s Halved lead, and until Halved has imported the intake that account reaches nothing but the intake at my.halved.io/intake. The lead enters the school’s practical details and contacts, being its Halved lead, its safeguarding lead and safeguarding alerts mailbox, the person who covers that mailbox when the safeguarding lead is away, its deputy safeguarding lead, its data protection officer and its IT contact, each by name and email address; its staff, by name, school email address and role; its classes; and its students, each by school student identifier, school email address and year group, with a first name only where the school shares names, the classes the student is in, and, where the school holds them, a reading age with the date it was taken and whether the student is working at age expectation in English and in mathematics. There is no field for a surname and no free text about a student. What the lead enters is saved to Halved’s database in MongoDB Atlas (Azure UK South) as they type, and nothing is done with it until they send it. A Halved Admin reviews a sent intake, and each review is recorded, then imports it through the same functions as Halved’s own administration screens. The import creates every account without sending an invitation; invitations are sent separately, near the school’s start date. Where the school says its student email addresses receive no email, each student is instead given a first password, made at the moment the school’s lead opens it, shown to the lead once to hand out in person, and not stored or recorded anywhere; the student chooses their own password at first sign-in. The intake is deleted when it is imported, and otherwise 30 days after it was last changed. A record of who sent, returned, reviewed, imported or deleted it, and of who sent the invitations and opened the first passwords, is kept for the term of the school’s agreement; it holds account and school identifiers, times and counts, and nothing the intake contained.

Halved does not collect:

2. Where data is stored

All data is stored within the Microsoft Azure UK South region (London datacentres), or on MongoDB Atlas hosted in Azure UK South. Halved stores no student personal data outside the United Kingdom. Two things Microsoft may hold or share are qualifications to that, and each is set out where it arises rather than here: content flagged by Microsoft’s abuse monitoring of the two Azure OpenAI resources, held in Sweden for the Sweden Central resource (section 3), and file metadata that Microsoft Defender for Storage may share outside the region it scans in (section 8).

WhatStorage technologyLocation
Student accounts, lessons, assignments, submitted work, and the display copy of conversation messages shown in the interfaceMongoDB AtlasAzure UK South
Full chat conversation history as the authoritative turn-by-turn record, learning profiles derived from conversations, attainment records, activity records, staff activity records, sign-in records, break-prompt answers, and safeguarding flagsAzure Database for PostgreSQLAzure UK South
Uploaded lesson files (PPTX, PDF)Azure Blob StorageAzure UK South
Student-uploaded filesAzure Blob StorageAzure UK South
Student-authored free-text notesMongoDB Atlas / Azure PostgreSQLAzure UK South
Temporary cache, conversation context, rate limiting, and background task queueAzure Cache for RedisAzure UK South
Secrets and credentialsAzure Key VaultAzure UK South
Text awaiting a repeat safety check, where the first check could not be completedAzure Database for PostgreSQLAzure UK South
Application and audit logsAzure Log Analytics workspacesAzure UK South

All data is encrypted at rest. Secrets such as API keys, passwords, and encryption keys are stored in Azure Key Vault and never stored in plain text.

3. AI and voice processing

AI inference for the Halved learning support is performed by the Azure OpenAI Service from two Halved resources, in two regions.

Chat, in Sweden Central. Responses to a student’s messages are generated from Halved’s production resource in Microsoft Azure Sweden Central, running gpt-5.1 on Microsoft’s regional Standard deployment type, under which Microsoft processes prompts and completions only in that region. Sweden is a European Union member state covered by UK adequacy regulations, so no further transfer safeguard is required. This is the only route on which student data is processed outside the United Kingdom.

Everything else, in UK South. Halved’s production UK South Azure OpenAI resource is halved-prod-oai, which carries two model deployments, gpt-4o and gpt-4.1-mini. The development and demonstration environments each have a UK South account of their own and do not use production’s account or its key. Six routes run on it, each on the same regional Standard deployment type:

Voice processing is performed by the Azure Speech Service in UK South. Halved’s application data is stored in Azure UK South. Schools are told under the Data Processing Agreement before any of this processing moves to another region.

Microsoft’s abuse monitoring. Microsoft’s service-level abuse monitoring applies to both Azure OpenAI production resources, in Sweden Central and in UK South, and is at Microsoft’s default on each. Under that default, content flagged by Microsoft’s automated abuse detection may be retained by Microsoft for up to 30 days for review by authorised Microsoft staff. For the Sweden Central resource, Microsoft states that data at rest, including that store, is held in Sweden, and that its reviewers of content from resources deployed in the European Economic Area are located in the European Economic Area. For the UK South resource, Microsoft publishes no commitment that those reviewers are in the United Kingdom.

Halved applied on 12 September 2026 to Microsoft’s modified abuse monitoring programme, under which the storage is turned off. Microsoft’s responses to that application (reference 3796260) have been contradictory: one refused it on the ground that the programme is available only to managed customers working with a Microsoft account team, and a later message states that the reference relates to a quota request. Halved has asked Microsoft to confirm the position. Until it does, the storage is treated as enabled on both resources, and the resource configuration is consistent with that. Microsoft documents the ContentLogging property (in “Data, privacy, and security for Foundry Models sold by Azure”, under “How can a customer verify if data storage for abuse monitoring is off?”) as appearing with the value false only where the storage is turned off, and as not appearing at all otherwise. It was absent from the UK South resource’s capabilities list when read on 15 September 2026, and absent from the Sweden Central resource when read on 24 September 2026. Absence is not a confirmation that the storage is off, and is not read as one here. This is Microsoft’s own processing under the Microsoft Products and Services Data Protection Addendum. Schools will be notified under the Data Processing Agreement if the position changes.

Microsoft Agent 365 data collection. Every Azure AI services account used by the platform carries a Microsoft property, a365LoggingEnabled, which controls whether agent activity data is sent to Microsoft Agent 365. Those accounts are Azure OpenAI, Azure Speech, Azure AI Vision and Azure AI Content Safety accounts, across the production, development and demonstration environments. Read on 24 September 2026, a365LoggingEnabled is false on every one of them, and Microsoft’s read-only status property a365Status reports NotLicensed on every one. Halved sets the property to false on every account and enforces that setting with an Azure Policy at subscription scope.

The two readings are not the same kind of evidence, and this document does not present them as one. false is Halved’s own setting read back to Halved, so it confirms that the instruction is in place and nothing more. NotLicensed is Microsoft’s own report, but it is not a confirmation that collection is disabled: it states that no Agent 365 licence exists on the tenant, and it read the same way when the property was still true. The value that would confirm the setting has taken effect is Disabled, and Microsoft does not return it here. What Halved actually relies on is the licence and the consent, not the flag: Halved holds no Agent 365 licence and has given no tenant-level consent, which on Microsoft’s documentation means no data is collected regardless of the property. The flag and the Azure Policy stand behind that, so that a licence bought later does not turn collection on everywhere at once.

Administrative access to production. Administrative access to production systems is limited to two named officers of Halved Limited, as described in section 4, one of whom holds access for break-glass use only, and is exercised from the United Arab Emirates under named individual accounts, managed devices, multi-factor authentication, no local copies of student personal data, and access logging. Because those individuals act for Halved Limited, a company registered in England and Wales, this is not a transfer of personal data to another organisation and no transfer mechanism is required. It is stated here so that schools can see where those officers work from, and it is authorised as part of the school’s documented instructions under the Data Processing Agreement. No person acting for any other organisation holds standing administrative access. Halved cannot currently offer administration of a school’s tenant from within the United Kingdom only.

AI chat processing, Azure OpenAI (Sweden Central)

When a student sends a message to Halved’s learning support, that message, along with structured context about the lesson topic, assignment criteria, and the student’s learning profile, is transmitted to the Microsoft Azure OpenAI Service from Halved’s production resource in Microsoft Azure Sweden Central, running gpt-5.1 on Microsoft’s regional Standard deployment type, under which prompts and completions are processed only in that region. Sweden is a European Union member state covered by UK adequacy regulations, so no further transfer safeguard is required. This is the only route on which student data is processed outside the United Kingdom.

The chat function is three assistants, not one. One answers a student’s messages. A greeting assistant composes the opening line when a student arrives. A staff assistant answers a member of school staff. All three run on this route and in this region. The staff assistant is the one that carries the most about a named student: it is sent the member of staff’s own full name, and, where the member of staff is asking about a student or a class, up to 4,000 characters of observed-behaviour context about them, which names the students it covers. What that context may and may not contain is described in section 1.

What is sent on a student’s turn:

What is not sent on a student’s turn:

Help with spelling and grammar. A student who wants their spelling or grammar looked at asks Halved, and what they get back is Halved’s own reply on the chat route above. There is no separate spelling or grammar service, and a student’s work in progress is not sent anywhere for checking on its own.

Azure OpenAI Service is governed by the Microsoft Data Processing Addendum. Data sent via the Azure OpenAI API is not used by Microsoft to train foundation models, and Halved does not use student data to train third-party models.

Halved operates as a closed-loop tutoring system: it does not browse the internet and does not return public-search results.

Note: if a student types their name or personal details directly into the chat box, that text will be included in what is sent to Azure OpenAI in Sweden Central, because Halved processes the message as written. Students should be advised not to include personal information in chat messages.

Voice features, Azure Speech Service (UK South)

Halved supports optional voice features, both processed entirely within Azure UK South:

Voice features are optional. If your school prefers to disable them, this can be requested.

Handwriting, annotation and images

Handwriting-to-text (input method). Student writes on a canvas in the browser -> the image is sent directly to Azure AI Vision (Read OCR, UK South) -> the recognised text is returned -> the image is discarded (held in memory for the duration of the call only; no write to Blob, database or logs) -> what happens to the recognised text depends on where the student is writing. On a piece of work, it passes Halved’s content-safety and safeguarding screening before it is inserted, and it is not inserted if the check finds a concern or cannot be made. In chat, it is placed in the message box for the student to send, and is then screened as a chat message: Halved’s web app stores the display copy of that message in the platform database before the AI backend screens it, so in chat the words are stored before they are checked, and are checked before Halved replies. The recognised text, not the ink, is what Halved reads. If handwriting cannot be read, Halved tells the student it cannot read it.

Submitted student ink (student work). A student’s strokes are drawn either over the lesson slide or on a blank jotter page, held as arrays of coloured strokes with each stroke recording which hand made it, then flattened into a single image per page and uploaded to Halved’s Blob storage (container student-uploads, path scoped by school and user). A record is created in the platform database and referenced from the submitted work. This describes submission. A page is also composited before submission, on the path set out under “Seeing the page a student is working on” below, which stores nothing. On the production environment the page is queued for a malware scan and Defender for Storage returns a verdict. A clean verdict releases the page to content screening, so a safeguarding check does run on a student’s submitted ink and a concern in it raises a flag. Delivery remains a separate question from screening. The page is shown to the teacher on ownership of the upload, and one scan outcome withholds it and only one: a positive malware finding. A page whose content screening has not yet completed is therefore still delivered, so screening runs on a student’s submitted ink without gating it. Retained with the assignment record; no automatic expiry; removable by staff or by the student’s school through the deletion process.

This is the position on production. It is not observable on the development or demonstration environments, where the malware scan is skipped by design and the page goes straight to content screening, so neither environment exercises the path a school’s data actually takes.

Teacher annotations. While marking, a teacher’s marks are held as coordinates in the platform database. On confirmation, the marked-up slide is flattened into an image and stored in Blob storage in the same way. Retained with the assignment record as staff-authored feedback.

Staff-authored ink is a separate case from the one above rather than a degree of it, and it divides in a way worth stating precisely. Defender for Storage does scan it, because the scanner works on the storage account and a teacher’s marking is written to the same container by the same route as a student’s. What does not happen is anything on Halved’s side. The scan is queued for a student’s upload only, so Halved never reads the verdict on a staff-authored file, the record stays permanently in its initial pending state, and no safeguarding screening is ever attempted on it. An infected file written by a member of staff would be identified in Azure and delivered to the student anyway. The marked-up image is shown to the student by the same ownership decision that governs the student’s own ink. What stands in place of a safeguarding check here is the school’s own staff conduct and supervision arrangements.

Photographed work. The photograph is uploaded to Halved’s Blob storage first. Content moderation and then text recognition (Azure AI Vision Read, UK South) run against the stored file. The recognised text is screened. The photograph is retained as the image of that page of work; the screened text is the text of that page.

Seeing the page a student is working on. Halved can look at the page a student is viewing, on demand, when the student is talking about what is on it. The page is sent as a single image to a separate vision call on the Azure OpenAI Service in Azure UK South, running gpt-4o on Microsoft’s regional Standard deployment type, and not to the Sweden Central resource that serves the chat function. That call returns a factual description of what is there; the description is text, and it is treated as content to describe rather than as instructions to follow. Where the student has been drawing, the image is their current working, composited from the strokes they have made and not yet submitted, so this is the one path on which a student’s unsubmitted ink leaves the device. That image is screened by Azure AI Content Safety (UK South) before the describing call sees it, on the same footing as a photograph the student uploads. A flagged image is never described, and it is a safeguarding detection rather than only a refusal: it raises a flag under its own source value and escalates to the designated safeguarding lead. The flag carries the category and a fixed marker in place of any excerpt, so no part of the image and nothing read from it reaches the record. Nothing is stored on this path at all. The image is held in memory for the one call and discarded, no write to Blob, database or logs, so it creates no retention surface and there is nothing for a student or a school to delete afterwards. Where the page holds no new working, the stored image of that page is used instead, and it is not screened on this path. What was checked when it was stored depends on the page. A photograph the student uploaded was moderated as an image when it was uploaded. A page of a document the student uploaded had its text screened, but its images were not moderated. A page of a teacher’s lesson material was not screened at all.

Profile photograph. This is not a piece of work and is handled on its own path. The account holder uploads a photograph of themselves. Before anything is stored, the image is sent to Azure AI Content Safety (UK South) for moderation. The path fails closed: a non-safe verdict, a timeout, or an unreachable scanner all reject the upload and delete the temporary file, so nothing is written to Blob storage unless a clean verdict was returned. A rejection on a non-safe verdict raises a safeguarding escalation to the school’s designated safeguarding lead, carrying the category and a fixed marker in place of any excerpt; no part of the image reaches that record, and the image itself is not retained. A clean image is written to Blob storage (container uploads, UK South) under a server-generated name, and the account record holds a pointer to it. Public access is disabled on the storage account, so the file is served only through a short-lived read-only signed link, minted server-side and only for a caller the platform has authorised to see that photograph. No text recognition runs on it and it is not sent to the AI that answers students.

What the sub-processors hold. Azure AI Vision receives an image, returns text, and retains nothing. The vision call that describes a page a student is working on, and the content-safety check that screens that image before it, each likewise receive an image and retain nothing. Halved’s own retention of images (submitted annotations, submitted jotter pages, teacher annotations, photographs) is described above and is governed by the Data Retention Policy.

Teacher-to-student messaging

A teacher composes a message and selects an audience (an individual student, a class, or a group). The message is stored in the platform database with the sender, the recipients and a timestamp, and is shown to the recipient student in the platform. Teachers can edit or recall a message they have sent.

Messages are staff-authored content. They are not passed to the AI that answers students as context, and they do not contribute to the AI learning profile.

Messages are automatically deleted 7 days after they are sent.

Attainment and progress

Three sources feed the attainment record:

Teacher marks. A teacher records a score against a piece of work (a score and a total). This is entered by the teacher, not generated by Halved.

Code-judged answer correctness. Where a student answers a question that can be checked deterministically (the answer is either right or it is not), Halved records the outcome of that check. This is a record of a code-evaluated result. An AI model’s opinion never enters the attainment record. Where correctness cannot be determined by a straightforward check, no attainment record is created.

Time in productive difficulty. Halved records how long a student spends working on a task that is appropriately stretching for them (as opposed to breezing through it, or being stuck). This is a task-fit signal, used to tell a teacher whether the work is pitched right.

Where a student reworks a piece of work after support from Halved, the change between the first attempt and the reworked attempt is recorded. This change is the only element Halved attributes to its own support.

The attainment record is surfaced to the student’s teachers and to the student as a trend. It is not used for ranking, comparison between students, or any automated decision about a student. It does not feed any inference about ability, SEND, or developmental stage.

Activity and time spent

What the record is. Halved holds a table of student activity intervals. One row records that a named student was active from a start time to an end time on one surface. Each row holds the student identifier, the school identifier, an optional session identifier, the surface, the start time and the end time, the length of the interval in seconds, and the time the row was created. The start time, the end time and the creation time are full timestamps with a time zone, each truncated to the minute. The length is computed before that truncation and stored exactly, in seconds, so the duration of an interval survives at full precision while the clock times do not. The truncation is enforced by the database as a constraint on each of the three timestamps, rather than by the code that writes them, so a later endpoint or a direct insert cannot store a finer time.

The surface value is one of six: chat, work-completion, lesson-content, lesson-notes, homepage, or unknown. The two lesson surfaces are deliberately separate: lesson-content is the lesson page a student reads or works through, and lesson-notes is the list page they browse to reach it, so that time spent choosing what to open is recorded as navigation rather than counted as time spent studying. “Unknown” is a real stored value, used where the surface could not be determined. The session identifier can also be absent. A row with no session and a surface of unknown attributes a period of time to a named student with no further context about what they were doing.

What it does not hold. No message content, no work content, no location, no device or browser identifier, and no inference about the student. It is a record of clock time and surface only.

Out-of-hours activity. Because these are clock times, the record covers whenever a student chooses to work, including evenings, weekends and school holidays. Halved does not restrict when a student may use the platform, so the record follows the student’s own choice of working time.

What it is for. Three outputs are produced: the total time a student has spent working, the proportion of that time spent with Halved’s support, and a distribution showing when in the day a student works. These are for the student’s teachers, and for the student’s own view of their own record.

What is built. Recording, the teacher measures and the student’s own view of the record are built and were released as a single change. Recording of a student’s activity begins in a given environment of the platform when that release is deployed there, and where it has not been deployed no activity record exists.

How the measurement is bounded. This table holds student accounts only. Staff activity is recorded by the same timer into a separate table, described under “Staff activity and sign-in days” below, so no staff time can enter a figure about a student. An interval ends at the last interaction actually observed, not at the later point the platform notices the student has stopped, and the same rule applies when the browser tab is hidden, since a student may have walked away before that happened. The measure is therefore conservative by construction: it can under-report a student who sits still, and cannot over-report anyone. For a figure shown to a teacher about a child, and to that child about themselves, that is the direction in which to err.

Who sees it. The student dashboard shows a student their own activity record, including a version of the when-in-the-day view, so that a student can see what is held about their own working time. Halved committed to the order: the timer that creates activity records ships with the student view, not before it. That commitment was met, the two having been released together, so there is no build in which a student’s working time is recorded while the student has no way to see it.

Retention. A maximum of 12 months from the start time of the interval, purged by a scheduled job, and in any event deleted on contract end plus 90 days, as set out in the Data Retention Policy.

Staff activity and sign-in days

Why they exist. For pilot reporting, which is reporting how the platform is being used during a school’s pilot, Halved records each sign-in by a student or a member of staff, and records staff activity as it already records student activity. The report gives, for each person in one school, the number of sign-ins, the number of different days on which they signed in, the total active time, the number of sessions and when they were last active. Decided by Halved on 30 September 2026.

Staff activity. A separate table of staff activity intervals, written by the same timer as a student’s and under the same rules: a start time and an end time, each truncated to the minute and held to the minute by a database constraint, the length of the interval computed before that truncation and stored exactly in seconds, the surface, and the time the row was created. An interval ends after five minutes without any typing, scrolling, pointer movement or touch, when the member of staff moves to another page, or when the tab is hidden. Each row holds the staff identifier and the school identifier. It holds no session identifier and no record of which piece of work was open, and no message content, work content, location, device or browser identifier. The table is separate from the student table so that no staff time can enter a figure about a student, and the service refuses to file a student account’s time in it.

Sign-in days. One row per person per day, holding the school identifier, the user identifier (a student or a member of staff), the date, the time zone the date is on, and the number of sign-ins that day. There is no time of day anywhere in the row, and no device, browser, network address or location. The date is computed by the service from its own clock at the moment of sign-in, in the school’s own time zone where the school has chosen one for Halved, and in Coordinated Universal Time where it has not; the row records which. Nothing about the sign-in is sent from the browser except that it happened and who it was.

Sessions. A session is not stored. The report counts a new session wherever an interval starts more than five minutes after the latest end before it, which is the same five minutes that ends an interval. Because the clock times are held to the minute, a pause within a minute of five minutes can fall either side.

Who sees it. A Halved Admin, through an administration screen available to the Halved Admin role only. The records are not shown to school staff, to students, or to any other school. Halved uses them to report on use of the platform, not to assess any person’s work.

When it is switched on. Both records are switched on in an environment of the platform by a deliberate setting, which is on in Halved’s development environment only and was not switched on in any environment schools use before this summary, the Privacy Policy and the DPIA Support Pack described them.

Retention. A maximum of 12 months, purged by two scheduled jobs: staff activity from the start time of the interval, and sign-in records from their date. In any event both are deleted on contract end plus 90 days, as set out in the Data Retention Policy. A student’s sign-in records are deleted with the rest of that student’s data by the erasure process. Staff records are not reached by the student erasure, and there is no automated route for erasing a staff account’s records on request: the 12-month purge is their only automatic removal, and a member of staff’s request is handled by Halved directly.

4. How access is controlled

Students and teachers log in with an email address and password.

5. Safeguarding

Halved includes a live safeguarding pipeline operating across all environments. Student messages are checked as they are sent, before Halved replies; where a check cannot be completed, what happens instead is set out under “When a check cannot be completed” at the end of this section. Where a welfare concern is detected, the concern is logged and an alert is sent to the school’s nominated safeguarding lead or leads. Lower-severity concerns are flagged and escalated without interrupting the student’s session. Higher-severity concerns return appropriate support information to the student and are escalated immediately.

Those sentences describe what happens once a concern has been detected. What the checks do and do not detect is the two paragraphs that follow, and this section is not to be read without them.

What the checks detect, and in what language. A check runs in two stages: a fixed list of terms, and behind it Azure AI Content Safety, which reads the text for harmful content. The list of terms is English. It holds no term in any other language, and nothing translates or transliterates what a student writes before the comparison is made. That matters more than it may first appear, because Content Safety has no category for a child disclosing that they are being abused, neglected or exploited: it scores whether text is harmful content, not whether a child is describing harm being done to them. For those categories the English term list is the whole of the detection, so a disclosure of abuse, neglect or exploitation written in another language is not detected and no alert is raised. Content Safety does work in other languages for self-harm, suicide, sexual content and violence, and a concern it detects there is logged and does reach the school’s safeguarding lead.

The response that interrupts the student is narrower still, and it is narrower in every language, English included. Stopping Halved’s reply and returning support information to the student happens at the highest severity only, and measurement on 10 September 2026 found that severity returned only where a term from the list had matched. So a student writing about being at risk in words that are not on that list, in English or in any other language, may raise an alert to the safeguarding lead through Content Safety while receiving an ordinary reply from Halved on the screen in front of them. Halved is lowering the severity at which the reply is stopped, and is adding terms in other languages to the list. Neither is in place at the date of this version, and a school should read this section as it stands rather than as it is intended to stand. A school whose students may write about their welfare in a language other than English should treat that as a matter for its own safeguarding arrangements and not as one this pipeline covers.

The safeguarding pipeline uses Azure AI Content Safety and Azure Logic Apps, both hosted in Azure UK South and covered by the Microsoft Data Processing Addendum. Safeguarding alert content, including a short excerpt of the flagged message, is sent to the school’s nominated safeguarding contacts by email through Azure Communication Services (United Kingdom).

Student-uploaded content is screened through the same safeguarding pipeline as chat messages: keyword detection runs first, followed by Azure AI Content Safety scanning (UK South). A malware-at-rest gate (Defender for Storage) applies to a student’s uploaded files; the Standard tier is active on the production environment. Defender scans every file written to the storage account, staff-authored images included, but Halved reads the verdict and acts on it only for a student’s upload.

Student-authored free-text notes are not routed through the live safeguarding pipeline and do not trigger live escalation. This is the remaining unscreened text surface on the platform; the safeguarding mitigation is staff visibility and point-of-use framing.

Submitted ink divides into two classes on production, and they do not behave alike. A student’s ink, on a lesson slide or a jotter page, is queued for a malware scan; Defender for Storage returns a verdict, and a clean verdict releases the page to safeguarding screening, so a concern in a student’s submitted ink raises a flag. A teacher’s marking ink is scanned by Defender in the same way, because the scanner works on the storage account rather than on what Halved asks it to look at, but it is never queued on Halved’s side, so no verdict is read and no safeguarding screening is attempted. In both cases the image is shown to the person it was sent to, because delivery is decided on ownership of the upload. One scan outcome withholds a student’s image and only one: a positive malware finding. So a student’s ink is screened but is not gated on that screening, and a teacher’s ink is scanned but nothing acts on the result.

So a concern drawn, or written by hand, into a student’s submitted work raises a flag and reaches the safeguarding lead, although the work still reaches the teacher while that is happening. For a teacher’s ink there is no automated safeguarding mitigation at all, and the school’s own staff conduct and supervision arrangements stand in its place.

Text Halved reads from handwriting a student is using as a way of typing is screened and does escalate. That is a different path from ink submitted as part of work. On a piece of work, the recognised text is screened before it is inserted, where a student’s submitted ink is screened but is delivered without waiting for the result. In chat, the recognised text becomes an ordinary chat message, and like every chat message its display copy is stored by Halved’s web app before the AI backend screens it and Halved replies.

Answer-sheet text is screened and does escalate. A student’s written work is checked while it is being drafted and again, in full and unconditionally, when it is submitted, and a disclosure written there reaches the designated safeguarding lead by the same route as a disclosure typed in chat. The draft check is opportunistic rather than continuous: it runs on new writing once enough of it has built up, so a short addition may not be checked until the work is submitted. Submission is what guarantees the whole sheet is screened. The record keeps these apart, so a lead can see whether a child typed it in chat or wrote it in a piece of schoolwork a teacher may already have read. Text Halved reads from a student’s handwriting is screened and escalates on the same footing.

What is not screened, stated together rather than left to be inferred from the paths above. A student’s ink is autosaved as an unsubmitted draft while they work, and that draft is not screened while it sits there: the three screening points are submission, handwriting recognised into text, and the composite Halved looks at. Words a student TYPES onto a page are screened on a fourth point that ink does not have: as text, on each save that adds words the page did not already hold, and again at hand-in. That screen records and escalates, never blocks, and says nothing to the student. It exists because image moderation does not read sentences, so a disclosure typed in a font would pass the composite check that a drawn one would not. The title a student gives an upload, and the original filename of the file, are stored as supplied and are not screened, although the file’s contents are. Student-authored free-text notes are not screened, as stated above.

A student’s working ink is a third source that reaches the designated safeguarding lead, alongside a chat message and the text of a piece of work. When Halved looks at the page a student is working on, the composited image is screened before it is described, and a flagged image raises a flag under its own source value and escalates. It is distinguishable in the record from the other two, and from the same student’s ink screened later at submission, which is a separate event on a separate path. The flag holds the category and a fixed marker in place of an excerpt, so a lead is told that something was drawn and what kind of concern it raises, and is not shown the drawing.

When a check cannot be completed

A check can fail to complete in two ways, and Halved treats them differently.

The safety service returns an error. The student is not blocked: the chat message goes to Halved, the piece of work is saved and the upload is delivered. (If the screening of an upload fails outright rather than returning an error, the upload is withheld instead, and its text is still held for the later check.) The failure is recorded for human review, in a record that holds no message content. Separately, the text that was not checked is held so that it can be checked later, in Halved’s database in Azure UK South. Every five minutes Halved first confirms that the safety service is answering again and then checks the held text, oldest first. Each held item is deleted as soon as it has been checked, whatever the check finds. A concern found in a student’s words at this later check is flagged and escalated to the school’s designated safeguarding lead exactly as it would have been if the check had completed at the time, at the same thresholds, and the alert says that the check was delayed and by how long. Because a late alert is the first time anyone has been told about that message, it is not merged with other recent alerts about the same student, so a school may receive several alerts together when held text is cleared after an outage.

A chat message whose check takes too long. The turn stops instead: the message does not go to Halved, and the student is told that something went wrong and asked to send it again. The message is still recorded for human review and held for the same later check, so a student who does not send it again still has it checked.

Halved’s own reply. If the check of a reply returns an error, the reply is shown to the student and is held and checked later in the same way. A concern found then alerts Halved, not the school, because the words are Halved’s and not the student’s, and a later check cannot withdraw a reply the student has already read. If the check of a reply takes too long, the reply is withheld and the student is asked to ask again.

What the later check does not cover. A later check is late: a student whose message could not be checked will usually have received an ordinary reply from Halved before it is read. An image whose moderation cannot be completed is not held, because only text is held: a photograph a student uploads is blocked instead, and a page Halved was asked to look at is not described. Handwriting a student is turning into text is not held either: if its check cannot be completed, the recognised text is not added, the student is told that the note could not be added right now, and nothing is checked later. If held text has failed its check fifty times while the safety service is otherwise answering, which takes more than four hours, it is deleted unread and Halved is alerted; and if the text cannot be held at all, because the write to the database fails, Halved is alerted and the text is not checked later. In both cases the school is not alerted automatically.

6. Data security summary

ControlStatus
Encryption at restYes, all Azure storage
Encryption in transitYes, HTTPS/TLS throughout
Secrets managementAzure Key Vault
Password storagebcrypt hashed
Role-based access controlYes, eight school roles plus Halved Admin
UK data residency (storage)Yes, Azure UK South and MongoDB Atlas Azure UK South
Data residency (processing)Chat AI inference in Azure Sweden Central (EU, covered by UK adequacy regulations); all other AI inference, voice and platform processing in Azure UK South; subject to the three qualifications stated in the Overview

7. Data retention and deletion

Halved retains student personal data for the duration of the school’s contract. Following termination of services, general personal data is securely deleted within 90 days, unless Halved is required to retain it for longer to comply with legal, accounting, or regulatory requirements.

Safeguarding records are treated differently. Where a safeguarding concern has been recorded, the associated record is retained in line with statutory safeguarding guidance (Keeping Children Safe in Education) and the school’s own retention schedule, which is typically up to seven years. This applies regardless of the general deletion timeline above.

Requests for deletion of an individual student’s data during the contract period (the right to erasure under UK GDPR) should be directed to dataprivacy@halved.io. Halved will action these requests without undue delay and in any event within one month of receipt, extendable by up to two further months for complex or numerous requests. Where a record is subject to a statutory safeguarding obligation, Halved may retain it to the extent required by law. The school, as controller, determines the retention and erasure of safeguarding records, as set out in the Data Processing Agreement and aligned to the school’s safeguarding retention schedule and Keeping Children Safe in Education.

In some circumstances, Halved may anonymise personal data so that it can no longer be associated with any individual. Anonymised data may be retained indefinitely and used to improve the platform.

8. Third-party services and sub-processors

Every third-party service used by Halved is deployed in the United Kingdom, except the Azure OpenAI resource that serves the chat function, which is deployed in Sweden Central; each is covered by a Data Processing Agreement. Two of them do not keep all processing within their region, and both are stated in the table rather than left to a reader: Microsoft’s abuse monitoring of the two Azure OpenAI resources, and file metadata that Microsoft Defender for Storage may share outside the region it scans in. The table below is a summary; the full Sub-processor Register, which adds the parent entity, the DPA relied on and the status of each, is published alongside this document as sub-processor-register.md.

This section counts third-party services. Halved’s own administrative access to production is not a third-party service and is not counted here, which is why the Overview of this document names three parts of the service that are not wholly contained in the United Kingdom and this section names two. The third is that administrative access, and it is set out in sections 3 and 4.

ServicePurposeLocationStudent data involvedDPA
Microsoft Azure (App Service, PostgreSQL, Redis, Blob, Key Vault, Log Analytics)Application hosting, primary data storage, secrets managementUK SouthAll student and teacher dataMicrosoft DPA
Azure OpenAI Service (Sweden Central resource)AI learning support chat responses (gpt-5.1, regional Standard)Sweden Central (Sweden, EU; covered by UK adequacy regulations), subject to Microsoft’s abuse monitoring (section 3)Chat messages, the student’s first name, lesson and page context, conversation history, learning profile summaryMicrosoft DPA
Azure OpenAI Service (UK South resource)Reading an uploaded document and deriving its aims, checkpoints and tasks, writing a student’s to-do line from their teacher’s material, and reading a student’s messages for interests they mention (gpt-4.1-mini); estimating the topic a piece of material covers, rewriting a student’s learning profile, reformatting a teacher’s lesson notes, and describing the page a student is working on (gpt-4o)UK South, subject to Microsoft’s abuse monitoring (section 3)Uploaded document content, page images, a student’s conversation where the profile is rewritten or interests are read, teacher lesson-note content and the material a to-do line is written fromMicrosoft DPA
Azure Speech ServiceSpeech to text and text to speechUK SouthStudent voice audio, AI-generated textMicrosoft DPA
Azure AI Content SafetySafeguarding and content moderation of messages and of page imagesUK SouthChat message content, page imagesMicrosoft DPA
Azure AI VisionConverting a student’s handwriting into text; reading text from images of a student’s work, being photographed work and submitted inkUK SouthThe image only, for the duration of the call. Azure AI Vision retains nothingMicrosoft DPA
Azure Logic AppsSafeguarding escalation workflow to the school’s Designated Safeguarding LeadUK SouthSafeguarding alert content and flagged message excerptsMicrosoft DPA
Azure Communication ServicesTransactional emails (account creation, password reset) and safeguarding escalation emails to school leadsUnited KingdomUser email addresses, names, account setup links, safeguarding alert contentMicrosoft DPA
Azure Container Instances (Gotenberg)Document conversion. PowerPoint and Word files are converted to PDF so that Halved can render page images for in-platform display, and a Word file is converted so that its text can be read. This covers teacher-uploaded lesson materials and documents a student uploads alike. A PDF is not sent to this converter: Halved renders PDF pages itselfUK SouthStudent-uploaded PowerPoint and Word documents, and teacher-uploaded lesson material contentMicrosoft DPA
Microsoft Defender for StorageOn-upload malware scanning of files written to Halved’s Blob storageUK South, with the metadata exception in this rowUploaded file content, covering student documents, photographs, and annotation images. Microsoft states that scanned files are not stored by the service and that scanning runs in the storage account’s own region, and that in limited cases the scanning engine may share file metadata, such as a SHA-256 hash, with Microsoft Defender for Endpoint outside the scanning region. File content is not shared on that pathMicrosoft DPA
MongoDB AtlasStudent accounts, lessons, assignments, submitted work, and the display copy of conversation messagesAzure UK SouthAll structured student and teacher dataMongoDB DPA

9. Contact

For data protection questions related to your pilot, or to request a Data Processing Agreement, please contact:

Halved Limited

dataprivacy@halved.io

Registered in England and Wales, company number 15261677.

10. Review

This summary is reviewed at least once a year, and sooner when the platform architecture, data processing activities or sub-processors change. The next scheduled review is June 2027.

This document reflects the technical architecture of the Halved platform as at the review date shown at the top of this page.