On the boundary

Three regimes, one boundary: MDR, MDCG 2019-11, and GDPR Article 9.

MDR Class IIa/IIb, MDCG 2019-11, and GDPR Article 9 collide at one decision: where you pseudonymise. The chain should hash the reference, never the patient.

Dato Bitarishvili, founding engineer·5 May 2026·11 min read

Three EU regulations converge on a single piece of clinical AI software: the Medical Device Regulation (Verordnung (EU) 2017/745), the Medical Device Coordination Group's guidance MDCG 2019-11, and the General Data Protection Regulation (Verordnung (EU) 2016/679). The first two ask the manufacturer to evidence that the device works as intended. The third prohibits processing the kind of data the device necessarily reasons over — unless a specific Article 9(2) exception applies and the processing is engineered with care. The collision happens at one place in the architecture: where pseudonymisation sits relative to the AI call.

Three regulators ask three questions. The stack has to answer all of them.

The notified body conducting the MDR audit will ask whether the device performs as the manufacturer claims. The MDCG-aligned reviewer will ask whether the software is qualified as a medical device under MDR/IVDR and, if so, what evidence supports classification and intended-use claims. The Data Protection Authority will ask whether the processing of health data is lawful under Article 9 and documented under the GDPR's accountability principle.

These three reviews do not run on the same calendar. They will not even be conducted by the same people. But they share a single artefact-source: the decision log of the AI system. If the log can answer each of their questions, the manufacturer has done its work once; if it can only answer one, the work happens three times in three formats.

A clinical AI stack worth running is built so that one log serves all three regulators. The shape that log has to take is the subject of the rest of this post.

MDR Class IIa/IIb is where most clinical AI lands.

Software that drives diagnostic decisions, triages cases, recommends treatments, or scores clinical risk is, in nearly every case, software-as-medical- device under MDR. The risk classification is rarely Class I (low risk, mostly self-certified) and rarely Class III (the highest, reserved for life-sustaining or implantable software). Most clinical AI sits at Class IIa or IIb — medium risk, requiring notified-body conformity assessment under Annex IX.

Annex IX is the regime that demands clinical evaluation, post-market surveillance, vigilance reporting, and periodic safety update reports. None of those are documents that one writes once. Each is a continuous evidence stream the manufacturer must keep current and produce on the notified body's request. The notified bodies operating in the DACH region for SaMD are well known — TÜV SÜD, TÜV Rheinland, DEKRA, and BSI Group's Munich office among them — and each will ask the same operational question on audit day: show us the evidence stream for the decisions the device made during the assessment window.

What the notified body wants is not a screenshot of a dashboard. They want a single, replayable artefact that contains every clinical decision the device made, with each decision's confidence score, the policy state at the time of decision, and the cryptographic anchor that proves the record has not been altered after the fact.

Article 10(8) is the easy part. Implantables are the edge case.

MDR Article 10(8) sets the retention obligation for technical documentation, EU declarations of conformity, and certificates: at least ten years after the last device covered is placed on the market. For implantable devices the obligation extends to fifteen years. This is the cleanest requirement of the three regimes, because retention is a configuration, not an architecture.

Adjudon's schema sets Organization.dataRetentionDays with a hard cap of 3,650 days — ten years exactly, enforced at the Mongoose layer with the validation message “Retention cannot exceed 10 years.” For Class IIa/IIb non-implantable devices, this satisfies Article 10(8) directly.

Implantable devices are the edge case. The schema cap is ten years; the regulation asks fifteen. The five-year shortfall is closed customer-side: run GET /api/v1/hash-chain/export periodically and preserve the bundle in the manufacturer's long-term archive. The chain bundle is replay-verifiable on its own — no Adjudon connection is required at the fifteen-year-out audit — so customer-side archival is a complete handover, not a degraded one. We document this honestly in the medtech doc rather than imply that “MDR retention” is universally covered without a class check.

MDCG 2019-11 asks for evidence that is not the model's self-report.

MDCG 2019-11 is the Medical Device Coordination Group's guidance on the qualification and classification of software under MDR/IVDR. For a manufacturer placing a clinical AI system on the market, it is the document that sets the bar for what counts as evidence that the software functions as intended.

The phrase “functions as intended” sits awkwardly on top of probabilistic systems. A classification model that outputs a softmax score can self-report any number it likes. A large language model with a confidence prompt can produce a calibrated-looking number that has no relationship to its actual performance. MDCG-aligned evidence therefore cannot be the model's self-report alone. It has to be triangulated against signals the model is not the source of.

Adjudon's Confidence Engine is built on three pillars: a base probability derived from the decision context, a variance signal computed across a small ensemble of model calls or sampling passes, and a historical-precedent signal that compares the current decision to similar decisions in the organisation's past trace history. The engine's output is a single confidenceScore in the range 0.0–1.0, plus an array of tags raised by the pillars: LOW_CONFIDENCE when the final score falls below 0.6, HIGH_AMBIGUITY when the variance signal indicates the model disagrees with itself across passes.

The MDCG-aligned answer to “does your software function as intended?” is therefore not a single number. It is the score, the tags, the policy that fired against them, and the chain entry that binds the four together. Four pieces of evidence per decision; one log; one replay path.

GDPR Article 9 is the harder part. It begins with a prohibition.

GDPR Article 9 starts from the position that processing data concerning health is prohibited. That prohibition is then lifted by a closed list of exceptions in Article 9(2): explicit consent for specific purposes, processing necessary in the field of employment law, public-interest grounds in the area of public health, scientific-research grounds with appropriate safeguards, and a small number of others. The default is no; the exceptions are narrow.

The GDPR's recital 26 is also relevant: the Regulation does not apply to anonymous data, and pseudonymous data is treated as personal data with reduced risk. Pseudonymisation, in other words, does not exit the GDPR. It changes the risk profile of the processing and the kinds of safeguards the Data Protection Authority will accept.

For a clinical AI manufacturer, the practical consequence is that the AI call should never receive raw patient identifiers. Names, dates of birth, full-resolution biometrics, ICD codes that re-identify the individual in a small population, and free-text records that contain any of the above must be replaced with stable pseudonyms before the AI agent runs — let alone before any third-party processor sees the trace.

The boundary that makes all three regulators answerable is the HTTPS call.

The architectural decision that resolves the three regimes simultaneously is the placement of pseudonymisation. It belongs on the customer side of the trace API, not the Adjudon side. The HTTPS request that crosses from the manufacturer's clinical pipeline to the Adjudon edge is the boundary at which special-category data has already been replaced with stable pseudonyms.

Adjudon's default PII scrubber removes generic patterns — email addresses, IBANs, credit-card numbers, US SSNs — from inputContext at ingestion. It does not ship health-specific patterns out of the box. Patient names are not scrubbed by default. ICD codes are not scrubbed. Biometric fields are not recognised. We document this explicitly in the medtech doc, because it is the question every notified body and every Data Protection Authority will ask in audit.

The honest answer to “does Adjudon process health data?” is therefore: only if you send health data, but the architecture expects you to pseudonymise first. The customer-side pipeline does the de-identification. Adjudon's side does the hashing. The boundary is the HTTPS call.

The chain hashes the pseudonym, not the patient.

Once the trace arrives at the Adjudon edge with pseudonyms in place of identifiers, the rest is mechanical. The Confidence Engine evaluates. The Policy Engine evaluates. The decision is persisted as a DecisionTrace. The Decision Hash Chain appends a HashChainEntry whose payloadDigest is a SHA-256 of the canonical-JSON of the trace fields — pseudonyms included, patient identifiers absent.

A notified body who later asks for the decision log of an MDR audit window receives an export bundle whose hash chain replays against the published algorithm. The pseudonyms in the bundle are operationally meaningful to the manufacturer (they can be re-linked customer-side to clinical context when an investigation requires it) and operationally inert to the auditor (the auditor never needs to see the patient identity to verify the decision integrity).

A Data Protection Authority asking the same export bundle the same question gets the same answer. The chain stores the pseudonym. The chain hash proves the pseudonym was not altered after the decision was made. The architecture treats the patient and the pseudonym as fundamentally different artefacts — which is precisely what GDPR recital 26 and Article 9 expect a careful manufacturer to do.

Three regulators. One log. The boundary that makes that possible is six lines of pseudonymisation code on the manufacturer's side of the HTTPS call.

The boundary, drawn in eight steps.

Four customer-side steps, four Adjudon-side steps, one HTTPS call between them. Special-category data lives on the left of the line; pseudonyms and chain entries live on the right. The diagram is the architecture; the architecture is the answer.

Customer side — your responsibility
C1
Patient-management system
Holds raw clinical data: names, dates of birth, full-resolution biometrics, ICD codes, free-text notes.
C2
Pseudonymisation layer
Strips identifying fields and replaces them with stable pseudonyms before any AI call.
C3
Clinical AI agent
Reasons over the pseudonymous record. Never sees the raw patient identity.
C4
POST /api/v1/traces
inputContext is already de-identified by step C2. The HTTPS body crossing the boundary contains pseudonyms, not patients.
Adjudon side — our responsibility
A1
HTTPS receive
Trace lands at the Frankfurt eu-central-1 edge, inside the EU residency perimeter.
A2
PII scrubber
Strips generic patterns: email, IBAN, credit-card, US SSN. Does not strip health-specific identifiers — that work happened at C2.
A3
Confidence + Policy Engine
Three pillars produce confidenceScore + tags; policy gate fires HTTP 201, 202, or 403.
A4
HashChainEntry appended
chainHash over payloadDigest of the trace fields — pseudonyms in, patients absent.
Read left-to-right: special-category data exists only in C1 and C2. From C3 onward, the pipeline operates on pseudonyms. The HTTPS body that crosses the boundary at C4 carries no patient identifier the manufacturer has not chosen to send.

If you're here for the boundary.

This post is the architecture. /solutions/healthcare-life-sciences is the manufacturer-grade reading: MDR Article 10(8) retention, MDR Class IIa/IIb conformity, MDCG 2019-11 software qualification, and GDPR Article 9 in one compliance table, with the backend mechanism per row. The canonical medtech doc lives at /compliance/medtech. Same engineer wrote both.