FHIR in European healthcare projects, 2026-2027
Plan European healthcare integrations around EHDS deadlines, MyHealth@EU expansion and national FHIR programs - and meet each mandate from plain Python.
European healthcare integration in 2026 and 2027 is driven by regulation with dates attached. The European Health Data Space (EHDS) regulation makes FHIR the strategic exchange standard, national programs are already processing millions of FHIR messages daily, and the European Medicines Agency is moving pharmaceutical data to FHIR too. Teams that build on FHIR now meet those deadlines instead of chasing them.
EHDS makes patient summaries mandatory
The EHDS regulation (EU 2025/327) entered into force on 26 March 2025. It mandates cross-border exchange of patient summaries and e-prescriptions by March 2029, and lab results, medical images and discharge reports by March 2031, with penalties up to EUR 20 million or 4% of global turnover. FHIR is the designated standard for all future exchange - the eHealth Network formally concluded that already in November 2022.
A patient summary aggregates several resource types around one subject into one document, which a Python service assembles:
# -*- coding: utf-8 -*-
# Zato
from zato.server.service import Service
class BuildPatientSummary(Service):
name = 'demo.fhir.patient-summary'
def handle(self) -> 'None':
client = self.fhir['FHIR.Sample']
patient_id = self.request.payload['patient_id']
# The subject of the summary ..
patient = client.get('Patient', patient_id)
# .. their active problems ..
subject = f'Patient/{patient_id}'
conditions = client.resources('Condition').search(subject=subject).fetch_all()
# .. and what they are taking.
statements = client.resources('MedicationStatement')
medications = statements.search(subject=subject).fetch_all()
# One JSON document, returned to the caller of our REST channel
self.response.payload = {
'patient': dict(patient),
'conditions': [dict(item) for item in conditions],
'medications': [dict(item) for item in medications],
}
Expose the service through a REST channel. The summary is then available to any authorized caller.
MyHealth@EU grows through 2026
Around 15 member states have operational MyHealth@EU services today, and Austria, Denmark, Germany, Hungary, Italy, Norway, Romania, Sweden, Slovenia, Slovakia and Belgium are expected to join through 2026. The FHIR transition inside MyHealth@EU has begun - the HL7 Europe Laboratory Report guide is its first FHIR-based service, and the Xt-EHR joint action is developing the EEHRxF logical models on FHIR R4/R5. E-prescriptions are the highest-volume use case - to look one up, search MedicationRequest:
# -*- coding: utf-8 -*-
# Zato
from zato.server.service import Service
class FindPrescriptions(Service):
name = 'demo.fhir.find-prescriptions'
def handle(self) -> 'None':
client = self.fhir['FHIR.Sample']
# Active prescriptions for a patient identified by their national identifier
prescriptions = client.resources('MedicationRequest').search(
subject='Patient/511a6231-361e-4b8e-8f9c-b183b7813f4d',
status='active',
)
for prescription in prescriptions.fetch():
self.logger.info('Prescription: %s', prescription['id'])
National programs run on FHIR already
Germany's e-Rezept processes several million FHIR-based prescriptions daily - the largest production FHIR deployment in Europe - and the ePA electronic record became mandatory for practices and hospitals in October 2025, with sanctions since January 2026. France mandates FHIR R4 for all new developments, with FR Core v2.2.0 published in March 2026 and the ordonnance numerique mandatory since January 2025. Finland is migrating from CDA documents to FHIR in phases through 2027.
For the systems that still speak HL7 v2 - which is most hospital systems - the migration path is receiving v2 over MLLP and writing FHIR resources out. To build that flow step by step, see HL7 v2 to FHIR transformation. The write side is one call:
# A resource assembled from the fields of an incoming HL7 v2 message
patient = client.resource('Patient',
identifier = [{'system': 'urn:mrn', 'value': mrn}],
name = [{'family': family, 'given': [given]}],
)
patient.save()
EMA moves pharmaceutical data to FHIR
The European Medicines Agency uses FHIR for its Product Management Services - the public API's beta opened in June 2026, serving product data as FHIR R5, with the final version expected in early 2027. The IDMP deadline for critical medicines passed in June 2026 and structured data for all other non-centralized products is due by December 2026. Electronic Product Information (ePI) uses FHIR R5 with a phased go-live from Q4 2026, EUDAMED device registration has been mandatory since May 2026, and legacy devices still on the market must be registered by November 2026.
ePI and similar regulatory content arrive as document Bundles - fetch one by its ID and navigate its entries:
# The document Bundle, by its ID
bundle = client.get('Bundle', 'epi-document-id')
# The first entry is the Composition that gives the document its structure
title = bundle.get_by_path('entry.0.resource.title')
self.logger.info('Document title: %s', title)
See also
| Page | What it covers |
|---|---|
| FHIR versions | Why R4 now and what R6 changes, with adoption data |
| Extensions | The fields that national Implementation Guides define |
| HL7 v2 to FHIR transformation | Receiving v2 over MLLP and writing FHIR resources out |
Learn more
Schedule a meaningful demo
Book a demo with an expert who will help you build meaningful systems that match your ambitions
"We evaluated 12 integration platforms and Zato was the only one to score 100%."
Philip Zuñiga, Assistant Professor, University of the Philippines