Terms
Terms used on this page
The words below have a narrow technical meaning in this field. This page uses them in that meaning throughout. Each term links to its entry in the DIDAS Glossary, which defines the same words for the whole Swiss ecosystem and carries them in German, French and Italian.
| Term | Meaning here |
|---|---|
| Credential | A set of claims about a subject, signed by the organisation that issued it and stored in the patient's wallet. One administered dose is issued as one credential. |
| Claim | A single data item inside a credential, such as the date of a dose or the disease it targets. The immunization credential type defines eighteen. |
| Wallet | The application that stores issued credentials under its own storage and lifecycle model, and that releases selected claims in response to a presentation request. The patient operates it. |
| Issuer | The organisation that signs a credential and transfers it to the wallet. Here that is a practice, a pharmacy, an insurer or the Confederation. |
| Verifier | The organisation that sends a presentation request and evaluates the response. Here that is a travel clinic, a practice reception, a pharmacy or a survey. |
| Selective disclosure | A property of the credential format: the issuer commits to each claim separately, and the holder can open some of those commitments and leave the others closed. Claims not selected by the presentation request and not released by the wallet are not included in the presentation response. |
| Status list | A published list with one entry per credential. Each credential carries the index of its own entry, and a verifier fetches the list and reads that entry to obtain the status the issuer has published. The status-list representation contains no clinical payload and no patient attributes. |
Background
An architectural consideration
meineimpfungen.ch held the national electronic vaccination record until its closure
in 2021, after which the records it held were no longer accessible to the people they described.
The episode illustrates the availability and continuity risks associated with relying on a single service for access to longitudinal health information. This showcase explores a different distribution model rather than a judgement on that platform.
The exchange model demonstrated here does not require a central repository holding the clinical payloads exchanged through these credentials. It does depend on the registries of the swiyu Trust Infrastructure, on wallet availability and recovery, and on governance arrangements that do not yet exist for the health domain.
What the model does and does not changeIn this showcase each administered dose is issued as its own credential, signed by the vaccinator that administered it, and stored in the patient's wallet. A credential already issued remains usable by its holder if the issuing organisation ceases to operate, subject to the status and revocation mechanisms the profile defines and to the continued availability of the identifier, status and trust infrastructure a verifier reads.
The mechanism
How credentials reach the wallet and how claims are presented
Four organisations issue credentials to the wallet: the Confederation, a health insurer, a practice and a pharmacy. Each issues the credential types its role permits in this project's policy configuration. Claims leave the wallet in response to a specific presentation request from a verifier, after the patient confirms that request in the wallet, one request at a time. Issuer and verifier exchange no clinical payload through a shared store. The component both sides read is the status list published by the Confederation's Base Registry, which carries a status entry per credential and no clinical payload or patient attributes. Both parties also resolve identifiers through the Base Registry and read trust statements from the Trust Registry.
Selective disclosure
What each verifier receives
The immunization credential type defines eighteen claims. This project's policy layer attaches an entitlement to each verifier role, naming the claims a verifier in that role may request. A query naming a claim outside that entitlement is rejected by the policy layer while the query is being built, before any request reaches the wallet.
The point at which that check runs is a design decision. A check applied after the wallet has responded operates on data the verifier already holds, so it constrains what the verifier is permitted to do with the claims rather than which claims it received.
4 / 18 claims disclosed
For comparison, the alternatives in routine use disclose differently: a paper booklet is read as a whole page, and a PDF exported from a portal is transferred as a whole file. Selective disclosure narrows the presentation to the claims the request selects and the wallet releases. It says nothing about correlation across presentations, which depends on the credential identifier, the holder key, the disclosed claim values, the status-list reference, timing and network metadata.
Governance
What happens before a clinical fact is accepted
A presentation raises several distinct questions. The technical profile and the trust infrastructure answer some of them: protocol validity, cryptographic validity, credential and status validity, holder key binding and issuer trust. Three further questions are governance questions and are answered here.
First, whether the issuing party may assert a clinical fact of this kind. A signature that verifies establishes which key signed and, through identifier resolution, which issuer holds that key. It does not establish that the issuer holds the role this project requires for the assertion. Second, whether the requesting party may ask for the claims it is requesting, which is a separate question from whether the request is well formed. Third, whether this particular presentation should be accepted, given its scope and context. Each question is implemented as its own function; the three run in a fixed order, and each records its reasoning whether the outcome is acceptance or refusal.
Who may assert this?
A practice may issue an immunization credential because it holds the vaccinator role in this project's policy configuration. An insurer does not hold that role, so the same request is rejected before it reaches the issuer.
Who may ask and for what?
A query naming a claim outside the requesting role's entitlement is rejected while the query is being built. A protected claim such as the AHV number needs an authorisation of its own, in addition to the role entitlement, whichever credential carries it.
Should this be accepted?
The status-list entry first, then the Trust Protocol 2.0 evaluation: the applicable
statements about the counterparty are validated and the markers for this interaction
are derived from them. An interaction for which the evaluation derives the governed
use case marker gucTM without the matching authorisation marker
gucaTM is declined under every policy, because
swiss-profile-trust:1.0 states that rule at MUST level. A marker is the
result of that evaluation rather than something the counterparty holds.
Some of the Swiss Profile's trust rules are stated at SHOULD level and cannot be satisfied in the Sandbox, because the Sandbox makes the official verification of an organisation optional. The Sandbox policy records each such rule as waived. The journal then shows which rule was relaxed and on what grounds. A demonstrator that deletes the rule instead reports the same success and leaves no trace that anything was skipped. On production swiyu the same code runs the strict policy, which requires the markers this one waives. That is one environment variable. It is the smallest of the differences between the two environments: what changes on production swiyu →
The journal records claim names and no claim values, so it evidences which rules were applied to an interaction without becoming a second copy of the patient's data. A test asserts that no AHV number and no vaccine lot number reaches it.
Standards
Composing with the openEHR and HL7 FHIR information models
HL7 FHIR and openEHR address healthcare semantics, information models and clinical data exchange and persistence. Verifiable credentials and the swiyu Trust Infrastructure address authenticity, provenance, controlled presentation and trust relationships. These are different layers and they can be composed. This project reuses the information models and does not itself operate a clinical data repository; that is a property of this demonstrator, not a position on how FHIR or openEHR should be deployed.
Every claim carries the FHIR element path it corresponds to and, where one exists, its openEHR archetype path. When a presentation arrives, the receiving system can rebuild the representation it already understands from the claims the holder released, locally. The mappings below are this project's own and have not been reviewed by the standards bodies concerned.
HL7 FHIR · CH VACD
"resourceType": "Immunization", "status": "completed", "vaccineCode": { "coding": [{ "system": "http://snomed.info/sct", "code": "871895005" }], "text": "dTpa-IPV combination vaccine" }, "occurrenceDateTime": "2026-09-11", "lotNumber": "S4021-B", "protocolApplied": [{ "targetDisease": [ … ], "doseNumberPositiveInt": 1, "seriesDosesPositiveInt": 3 }]
openEHR · flat composition
immunisation/medication_management/ medication_item: "dTpa-IPV combination vaccine" immunisation/medication_management/ medication_item/code: "871895005" immunisation/medication_management/ time: "2026-09-11" immunisation/medication_management/ batch_id: "S4021-B" immunisation/medication_management/ route: "IM" immunisation/territory|code: "CH"
Two properties hold for every projection. The code states both wherever it performs one. First, a projection is derived and not authoritative. The signed credential remains the evidence. Second, a projection is legitimately partial. After selective disclosure a FHIR resource may carry findings and no patient name. A receiving system therefore has to treat an absent element as an expected outcome of the disclosure rather than as a data error. Handling those partial resources is the main integration cost of this approach.
| Profile | Carries |
|---|---|
| swiss-profile-anchor:1.0.0 | DID Core 1.0, did:webvh 1.0 |
| swiss-profile-issuance:1.0.0 | OpenID4VCI 1.0, OAuth 2.0 DPoP (RFC 9449) |
| swiss-profile-verification:1.0.0 | OpenID4VP 1.0 with DCQL, JAR (RFC 9101) |
| swiss-profile-vc:1.0.0 | SD-JWT (RFC 9901), SD-JWT VC draft-15, Token Status List draft-20, OCA 1.0 |
| Trust Protocol 2.0 | Trust markers, trust registry, protected fields |
The blueprint
Eleven documented flows
Each of the eleven is a self-contained file holding machine-readable front matter, a diagram, the governance constraints that apply, the standardisation constraints that apply and the questions it leaves open. The file is the specification; every entry below links to it. Each file can be moved into a trust flows repository and sit beside flows from unrelated sectors.
The eleven are not the same kind of object, and the ways they differ are independent of each other. Each file declares four characteristics: whether it is a flow or a transformation, whether messages cross a party boundary (multi-party, local or unresolved), whether it is atomic or composed, and whether it concerns a discrete event or a continuous stream. F-08 is composed and an inter-party exchange; F-10 is continuous, which says nothing about whether it is local or multi-party, so those two fields are unresolved for it.
The seven modelled interaction flows are also drawn in LikeC4, in the same form as the DIDAS reference flow, so that they can move without being redrawn. Every step in the model carries the protocol, the data format and the eHealth Suisse rule behind it in its notes. Interaction scope decides which entries have a diagram, not maturity. F-07 is implemented and has none because it is a local projection step rather than an exchange between parties: it begins after a presentation has completed and maps the disclosed claims into FHIR or openEHR representations inside the verifying organisation. F-08 and F-09 are multi-party and could carry one; both are roadmap flows and are not yet modelled. F-10 leaves its interaction scope unresolved, so there is no exchange to draw. Three of the eleven depend on a mechanism the current Swiss Profiles do not define, recorded with stable identifiers in the Swiss Profile gap register. Open all the diagrams →
Roadmap
Planned work, 2026 to 2028
Immunization Showcase
- FHIR / openEHR interplay
- End-to-end prototype, runnable offline
- Blueprint: the eleven flows
- Governance model that rejects out-of-policy issuance and requests
International Patient Summary
- Allergies, problems, medication statements
- Multi-credential presentation, which the current Swiss Profile Verification does not define (GP-01)
- Absence semantics: "none known" vs "none held"
- Interoperation with EPD / EGD infrastructure: issuer, source, verifier and repository roles to be examined
- Composition with the openEHR / HL7 blueprint
Swiss Health App
- Wearable and continuous data
- Summary credentials with accountable computation
- Measurement provenance (GP-05) and standing authorisation (GP-04)
- User experience optimised
Step 1, item by item
| Deliverable | Status | Where |
|---|---|---|
| End-to-end prototype | Done | apps/demo |
| Immunization credential, issuance and verification | Done | F-02, F-03 |
| FHIR / openEHR interplay | Done | F-07, projections.ts |
| Blueprint | Done | flows/ · eleven flows |
| Governance model | Done | governance.ts |
| Supporting consultation flows | Done | F-04, F-05 |
| Lifecycle and correction | Partial | F-06 · supersession missing |
| Actor onboarding | Partial | F-01 · no governance body |
The IPS sections step 2 has to cover
Step 1 covers Immunizations. It reaches partway into Medications and Results. The remaining sections are the natural unit of work for 2027. Their LOINC codes are the ones the IPS uses.
| Section | LOINC | Status here |
|---|---|---|
| Immunizations | 11369-6 | Covered. The showcase credential |
| Medications | 10160-0 | Partial. Prescriptions, without medication statements |
| Results | 30954-2 | Partial. Laboratory reports |
| Allergies | 48765-2 | Gap. The 2024 project carried these |
| Problems | 11450-4 | Step 2 |
| Procedures | 47519-4 | Step 2 |
| Devices | 46264-8 | Step 2 |
Allergies are the one gap here against the project this work continues: the 2024 wallet carried allergies and the practice asked for them at check-in. Everything else in this table is an extension of what step 1 built.
The other 2026 showcase
openEHR Switzerland brought a second vaccination showcase to the same hackathon: FHIR intake in CH VACD format, persisted as an openEHR composition in a clinical data repository. openEHR Switzerland and HL7 Switzerland have since formed a joint working group to turn it into a reusable implementation blueprint. They raise the substantive objection to the design on this page. A vaccination record has to stay clinically usable for a lifetime. A document exchanged at one moment is a different object from a record maintained over decades.
The 2024 project's own staging is where the two approaches meet. It described three stages: document-oriented "EPD 1.0", structured and server-based "EPD 2.0", structured and wallet-based "EPD 3.0". The openEHR showcase is a working stage 2 and this project is a working stage 3. Composition in both directions is already specified. A repository can issue credentials from the records it holds. A presented credential can project into the ingestion path that blueprint defines. Building that composition is the main item on the 2027 list.
Public health
Vaccination coverage monitoring in Switzerland
Switzerland measures vaccination coverage through the Swiss National Vaccination Coverage Survey, run since 1999 by the Epidemiology, Biostatistics and Prevention Institute (EBPI) at the University of Zurich with the Federal Office of Public Health and all 26 cantons. It samples randomly selected households of 2-, 8- and 16-year-olds on a three-year rolling cycle. It asks the family to post a copy of the child's vaccination record.
The data source is already the record the family holds. Coverage monitoring never depended on a
central register. When meineimpfungen.ch closed in 2021 the survey carried on,
because it had never read from it.
What the photocopy discloses
Every dose, every date, the vaccinating physician and usually the child's name. Then manual transcription, manual coding and up to three contact attempts by post and telephone.
What a presentation discloses
Five claims: target disease, date, dose number, doses in series, vaccine code. No name, no birth date, no performer, no lot number. Structured, signed, already coded to SNOMED.
Today a family posts a photocopy of the child's vaccination record, which shows every dose, every date, the vaccinating physician and usually the child's name. The presentation modelled here selects five claims and no person identifier, so of the eleven flows it is the one whose disclosure is narrower than the procedure it would replace. The survey response does not require the presentation of an explicit person identifier; the stratum the analysis needs arrives inside the invitation credential. Other disclosed values and protocol metadata may still contribute to correlation, which the section below sets out. The approval step is not new either: households are invited by letter today and may decline today, and the wallet adds a confirmation of the presentation request rather than a new legal consent.
One methodological constraint governs the whole design. The wallet is a response channel and not a sampling frame. A survey that accepted volunteered credentials would measure the population that chose to volunteer, and that selection bias cannot be corrected from inside the sample. EBPI draws the sample from the population register or an equivalent method, and the wallet is used only to return a response to an invitation already issued.
Unlinkability
Unlinkability is used here for two distinct properties. First, that the receiving party cannot associate a response with the household it came from. Second, that it cannot associate two responses with each other. Each depends on a specific correlation surface: the credential identifier, the holder key, the disclosed claim values, the status-list reference, the issuer, timing and network metadata. For a coverage survey the first property is the one that decides the design, because a response that can be associated with a household makes the survey a record of who replied and what they replied.
The design addresses the first half. The invitation posted to the household carries a single-use credential holding the stratum (age band, canton, survey cycle) and no household identifier. The wallet presents it together with the dose claims in one presentation, and the survey revokes it once the response is accepted, using the same two bits on a public status list that make a prescription single-use in F-05. From the response itself the survey learns that a household in a given canton with an 8-year-old reported a given set of doses. No person identifier is disclosed that the survey could use to join that response to its sampling record.
Record nothing that could be recorded
A verifier receives a signed presentation and is technically able to keep all of it. The rule here is that the analysis variables are extracted and everything else is discarded: the transcript, the credentials, the signatures and the request metadata. Metadata here means timing, IP address, user agent and response ordering. In a sample this small each of those is identifying.
Where unlinkability is not yet structural
The survey both issues the invitation and revokes it. A retained mapping from invitation index to posted address, combined with revocation timing, would let the survey associate a response with a household. Separately, the same dose credentials presented in two cycles expose the same credential-level artefacts, so those two responses may be associated with each other. Closing either requires batch issuance or a zero-knowledge presentation, and neither is in place.
Until one of those two mechanisms is implemented, the property rests on the survey operator following the retention rules above rather than on the protocol preventing the correlation, which is the weaker of the two positions. A zero-knowledge presentation would let the wallet demonstrate that it holds an invitation credential whose status entry is still unset, without disclosing which invitation that is. That would remove the correlation available through the invitation index and its revocation timing. The candidate scheme and its fit to this profile are tracked in issue 10, Longfellow ZK.
Scope
What this prototype is and is not
This is a prototype for exploration and discussion. It has not undergone a security review, a data protection impact assessment or operational hardening, and it is not production-ready.
- Sandbox only. Nothing here has been run against a production deployment of the swiyu Trust Infrastructure. Conformance rules are enforced against the profile text.
- The bundled demonstration runs against a mock. In its default mode the runnable application exercises the business flow and the governance rules against a simulated wallet and simulated generic components. That mock performs no signing, no DPoP, no encryption and no identifier resolution, and establishes nothing about protocol conformance.
- No predicate proofs. The Swiss Profile mandates SD-JWT VC, in which claims are individually disclosable. Demonstrating a property of a claim, such as that a date falls within a range, without disclosing the claim value is not available in this profile.
- Unlinkability is not claimed. Selective disclosure narrows the claims included in a presentation. It does not remove the correlation surfaces two verifiers could use, which include the credential identifier, the holder key, the disclosed claim values, the status-list reference, timing and network metadata; see below.
- The semantic mappings are unreviewed. The FHIR and openEHR bindings are this project's own and have not been endorsed by the standards bodies concerned.
- Demonstration data is illustrative. SNOMED CT codes, GLNs, BAG numbers, GTINs and LOINC codes shown here are plausible and not real.
Open questions
What is not solved
No one can grant the roles yet
Nothing here deploys until some body can issue the trust statement that says "this DID is a practice authorised to vaccinate". The Confederation's onboarding establishes which legal entity controls the identifier. It does not state what that entity may do in healthcare, and no health-domain governance body exists to state it.
There is a second half to this, at the protocol layer. swiyu opens governed credential types in stages, by ambition level. AN1 covers the e-ID. AN2 covers other authoritative credentials from federal, cantonal or municipal authorities. AN3 is the open ecosystem where private organisations issue on the same infrastructure. Governed issuance currently reaches AN1 and AN2. A practice, a pharmacy and an insurer are private organisations, so the health showcase sits in AN3. Going to production resolves neither half: what changes on production swiyu →
Series across issuers
Dose 2 is given by a pharmacy that cannot see dose 1. Today the administering party asserts the dose number, so a wallet holding two "dose 1 of 3" credentials is possible. Resolving it needs a presentation at administration time or a shared series identifier.
The double-dispensing window
Between a prescription being presented and being revoked there is a window in which a second pharmacy could accept it. Paper has the same window and closes it physically.
"Protected against X" is an inference
The credential says which diseases a dose targets and when. Whether that amounts to protection depends on the schedule and elapsed time. Who is accountable for that inference is a clinical-safety question for the sector to settle.
Presentations are not unlinkable
Repeated presentations of the same credential may be correlatable where the presentations expose stable credential-level or claim-level information. Two verifiers that exchange presentation data may therefore be able to determine that two presentations relate to the same credential, and so to the same holder. The degree of correlation depends on the credential format, the holder-binding mechanism, the disclosed claims and the presentation protocol. Batch issuance reduces the credential-level surface and is not used here, because across a dose series the disclosed claim values are themselves close to identifying. A zero-knowledge presentation would address the credential-level surface directly; the candidate is tracked in issue 10.
The susceptible cannot be enumerated
Coverage measurement survives, because Switzerland has never measured it from a register, as the section above sets out. What a decentralised record removes is the ability to act on named individuals. Outbreak response, recall and catch-up campaigns all require knowing who is behind on a series. A sample yields a rate. A register would yield a list. A wallet yields neither. This follows from the design. It is a policy question rather than an engineering one.
Next step
Discuss, test and learn
The open questions above are not resolved by architecture alone. Further dialogue among healthcare actors, regulators, patient representatives, insurers and implementers is needed to decide which use cases are worth pursuing, which concerns matter in their specific context and which technical or governance choices are proportionate.
Bounded experiments can turn those discussions into evidence. A pilot can test an actual workflow, observe user and operational effects, surface unintended consequences and feed the results into the next design cycle. The objective is iterative learning rather than confirming a preselected solution: define a use case, test a limited model, evaluate the outcomes and concerns, and refine or discard the approach.
As an official swiyu Orchestrator, DIDAS can help convene the multi-stakeholder dialogue and support regulatory sandboxing or other controlled experimentation where the use case calls for it.
Where an experiment requires a temporary deviation from rules under the Federal Health Insurance Act, Article 59b KVG (the Experimentierartikel) provides a basis for EDI-approved pilot projects in specified areas, including strengthening quality and promoting digitalisation. Its applicability has to be assessed for the concrete use case; it is not a general sandbox for health regulation.
Origins
Where this work comes from
This showcase was prompted by two GovTech Hackathons. Both supplied part of the basis it builds on.
| Use case | What it contributed |
|---|---|
| GovTech Hackathon 2024, project 1103 "Digital Health mit der neuen E-ID Trust-Infrastruktur" |
Led by DIDAS, with Peter Janes as project lead. It established the use case, the stakeholder model and the staged EPD 1.0 / 2.0 / 3.0 framing that this repository continues. It won the future-oriented category that year. |
| GovTech Hackathon 2026, project 28 "Showcase Impf-Modul" |
Brought by openEHR Switzerland with a DIDAS contribution. It supplied the clinical model side: CH VACD profiling, terminology binding and openEHR persistence. This project reuses the information models; it does not itself operate a clinical data repository. The two address different layers and can be composed. |
The code in this repository and the runnable application it builds were originally developed and contributed by Accelerate GmbH.