# openEHR vs FHIR: storage model vs exchange standard, and when to use both

> A practitioner comparison of openEHR and HL7 FHIR: two-level modelling, AQL and the openEHR REST API against FHIR resources and profiles, with European deployments and the openEHR CDR plus FHIR façade pattern.

Author: Ala Ben Aicha

Canonical page: https://alabenaicha.me/insights/openehr-vs-fhir

Updated: 2026-10-06

## Direct answer

openEHR specifies how to store and query a lifelong clinical record: a stable Reference Model, clinical content defined in archetypes and templates, and a query language (AQL) over that data. FHIR specifies how systems exchange data: resources, profiles and a REST API. They overlap less than the "vs" suggests. A common European pattern keeps the persistent record in an openEHR clinical data repository (CDR) and exposes FHIR at the edges for apps, partners and EHDS exchange.

## What openEHR specifies

openEHR is built on **two-level modelling**. Software and clinical content are separated on purpose.

**Level 1: the Reference Model (RM).** A small set of generic classes that rarely changes: `EHR`, `COMPOSITION`, `OBSERVATION`, `EVALUATION`, `INSTRUCTION`, `ACTION`, `ELEMENT`, and data types such as `DV_QUANTITY` and `DV_CODED_TEXT`. A CDR, its persistence layer and its APIs are written against the [Reference Model](https://specifications.openehr.org/releases/RM/latest/) only. The RM also carries versioning: every committed change is a new version inside a contribution with audit details (who, when, why).

**Level 2: archetypes and templates.** An archetype is a reusable constraint on the RM for one clinical concept: blood pressure, a problem/diagnosis, a medication order. Archetypes are designed to be maximal, covering everything any clinician might reasonably record about that concept. A template combines and narrows archetypes for one use case, such as an emergency triage form or a discharge summary.

Both are written in ADL (Archetype Definition Language). In practice:

* **ADL 1.4** is still what most CDRs and modelling tools exchange today.
* **ADL 2** is the current specification ([ADL2, AM Release 2.3.0](https://specifications.openehr.org/releases/AM/latest/ADL2.html), marked stable). Support across products is uneven, so check before you commit to it.
* **Operational Template (OPT).** The compiled, flattened template a CDR loads. It is the runtime schema. You upload an ADL 1.4 OPT as XML with `POST /definition/template/adl1.4`.

The practical consequence: when a hospital needs a new form, the team loads a new template. Nobody migrates a database schema.

### Clinical Knowledge Manager

Archetypes are reviewed by clinicians and published in the [international Clinical Knowledge Manager](https://ckm.openehr.org/ckm/) (CKM). Several countries run their own CKM instance for national content; Norway's is at [arketyper.no](https://arketyper.no/ckm/). This is the governance layer that FHIR has no direct equivalent for: content review is done by clinical modellers, separately from the people who write the API spec.

### AQL: querying by archetype path

The Archetype Query Language (AQL) queries across compositions and across EHRs using archetype paths, regardless of which application or template recorded the data. The current spec is [AQL in QUERY Release 1.1.0](https://specifications.openehr.org/releases/QUERY/latest/AQL.html), which added `LIMIT` and `OFFSET`. A synthetic example that pulls raised blood pressure readings for one EHR:

```sql
SELECT
  c/context/start_time/value AS recorded_at,
  o/data[at0001]/events[at0006]/data[at0003]/items[at0004]/value/magnitude AS systolic,
  o/data[at0001]/events[at0006]/data[at0003]/items[at0005]/value/magnitude AS diastolic
FROM EHR e
  CONTAINS COMPOSITION c
    CONTAINS OBSERVATION o[openEHR-EHR-OBSERVATION.blood_pressure.v2]
WHERE e/ehr_id/value = $ehr_id
  AND o/data[at0001]/events[at0006]/data[at0003]/items[at0004]/value/magnitude >= 140
ORDER BY c/context/start_time/value DESC
LIMIT 10
```

The `at0004` and `at0005` codes are node IDs inside the blood pressure archetype (systolic and diastolic). The same query returns readings captured by a ward chart, a GP template or a home-monitoring app, as long as each used that archetype. Drop the `WHERE e/ehr_id/value` clause and it runs as a population query, which is why research platforms like openEHR.

### The openEHR REST API

The REST spec (ITS-REST) defines the HTTP surface a CDR exposes. [ITS-REST Release 1.1.0](https://specifications.openehr.org/releases/ITS-REST/Release-1.1.0) was published in July 2026, the first minor release since 1.0.3 in 2022. It reworks the simplified (FLAT and structured) formats and adds a Demographic API, an Admin API and a "SMART on openEHR" app launch, the last three at development maturity. The calls most integrations use:

| Call                                | Purpose                                                      |
| ----------------------------------- | ------------------------------------------------------------ |
| `POST /ehr`                         | Create an EHR for a subject                                  |
| `POST /ehr/{ehr_id}/composition`    | Commit a composition against a loaded template               |
| `POST /query/aql`                   | Run an ad hoc AQL query; parameters go in `query_parameters` |
| `GET /query/{qualified_query_name}` | Run a stored, versioned query                                |

## What FHIR specifies

FHIR defines resources (Patient, Observation, Condition, MedicationRequest, Encounter and many more), a REST API, plus messaging and document paradigms. Resources follow an 80/20 design: the core covers what most systems already store, and anything else goes in [extensions](https://hl7.org/fhir/R4/extensibility.html). [Profiles](https://hl7.org/fhir/R4/profiling.html) constrain resources for a context and are published in implementation guides such as HL7 Europe Base and Core or US Core.

Most production work still pins [FHIR R4](https://hl7.org/fhir/R4/) (4.0.1). R6 was in normative ballot during 2026 and is not the version to build national exchange on today. If you need the end-to-end view of resources, search and SMART, start with the [HL7 FHIR integration guide](https://alabenaicha.me/insights/hl7-fhir-integration-guide).

The design difference matters: a FHIR resource is a minimal exchange shape plus extensions, and an openEHR archetype is a maximal clinical model narrowed by templates. Mapping between them is lossy in both directions unless someone decides, field by field, what each side means.

## Key differences

| Dimension                | openEHR                                                                     | FHIR                                                                                                   |
| ------------------------ | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| **Purpose**              | Persistent, longitudinal, vendor-neutral clinical record                    | Exchange between systems via REST, messages and documents                                              |
| **Model**                | Small RM + maximal archetypes + use-case templates                          | Resources (80/20) + profiles + extensions                                                              |
| **Granularity**          | Every data point addressable by archetype path                              | Resource-level; detail depends on the profile and extensions                                           |
| **Versioning and audit** | Built into the RM: versioned objects, contributions, audit details          | `meta.versionId` and `_history` are server-dependent; Provenance and AuditEvent are separate resources |
| **Querying**             | AQL across compositions and EHRs                                            | Search parameters per resource type, `_include`, chaining; analytics usually via bulk export           |
| **Governance**           | openEHR specs; clinical content reviewed in CKM                             | HL7 core; IGs from HL7 affiliates, national agencies, IHE and accelerators                             |
| **Tooling**              | CKM, archetype/template designers, a smaller set of CDRs                    | Large ecosystem of servers, validators, SDKs and test tools                                            |
| **Typical deployments**  | National and regional CDRs, hospital EHR platforms, research data platforms | Patient and provider APIs, national exchange, SMART apps, payer APIs                                   |

On the CDR side, [EHRbase](https://github.com/ehrbase/ehrbase) is the best-known open-source option (Apache 2.0), alongside commercial platforms. On the FHIR side, compare server options in [FHIR servers compared](https://alabenaicha.me/insights/fhir-servers-compared).

## Where both run together in Europe

Examples with public sources:

* **Norway.** The Norwegian Directorate of Health [notes that DIPS Arena](https://www.helsedirektoratet.no/digitalisering-og-e-helse/veikart-for-nasjonal-e-helsestrategi/helse-sor-ost-rhf), the hospital EHR in the South-Eastern region, uses vendor-independent information models based on openEHR archetypes.
* **Slovenia.** The national Centralised Registry of Patient Data stores data in openEHR on the Better platform, with more than 250 million clinical records after ten years [according to Better](https://www.better.care/news/250-million-clinical-records-stored-in-slovenias-centralised-registry-of-patient-data/).
* **Catalonia.** The regional health service runs a population-scale openEHR CDR, described in vitagroup's [Catalonia whitepaper](https://www.vitagroup.ag/en/discover/magazine/whitepaper-lessons-from-catalonia-on-scaling-digital-platforms).
* **United Kingdom.** OneLondon's Universal Care Plan runs on an openEHR platform with a persistent data layer separated from applications ([Better case study](https://www.better.care/case-study/universal-care-plan-making-personalised-care-a-reality/)).
* **Germany.** University hospitals in the HiGHmed consortium built [openEHR-based data integration centres](https://www.egms.de/static/en/meetings/gmds2019/19gmds161.shtml) for research. The open-source [FHIR Bridge](https://github.com/NUM-Forschungsdatenplattform/num-fhir-bridge), a broker between FHIR clients and an openEHR server, came out of the German university medicine research network.

Several of these sources are vendor publications. Treat the figures as vendor-reported.

## Combination patterns

**1. openEHR CDR as the store, FHIR façade for exchange.** Applications write compositions through templates. A façade maps selected archetypes to FHIR profiles on read (and sometimes write). Partners, SMART apps and national services see FHIR. Clinicians and analysts keep AQL.

**2. Mapping engines instead of hand-written code.** FHIRconnect is a YAML-based mapping language for bidirectional openEHR–FHIR mappings. Better started it, stopped maintaining its [original repository](https://github.com/better-care/fhir-connect-mapping-spec) in 2024, and the community spec now lives in the [FHIRconnect-spec repository](https://github.com/SevKohler/FHIRconnect-spec). The authors' [2025 paper](https://arxiv.org/abs/2511.14618) reports mapping 24 international archetypes to 15 FHIR profiles. [openFHIR](https://github.com/openFHIR/openfhir), first announced by Medblocks in 2025, is an Apache 2.0 engine that executes FHIRconnect mappings without storing clinical data itself. Its README says the open-source edition is not intended for production (no authentication or terminology server integration). Version-pin the mapping files like code.

**3. FHIR server as the store, openEHR not used.** Valid when the product is an app or exchange hub with a narrow data scope. You give up AQL and archetype governance, and you will add extensions as scope grows.

### EHDS relevance

Under EHDS, the European electronic health record exchange format (EEHRxF) governs exchange, not storage. The Commission must adopt the implementing acts with its technical specifications by 26 March 2027, and they are [widely expected to build on HL7 Europe's FHIR implementation guides](https://www.ringholm.com/ehds/implementing-act-15\(1\).htm). Until the acts are adopted, treat that as direction, not law. An openEHR-based EHR system will therefore need a FHIR export path for patient summaries, ePrescriptions, lab results, imaging reports and discharge reports. See [FHIR EU Core and EHDS](https://alabenaicha.me/insights/fhir-eu-core-ehds-implementation) for the IGs and the [EHDS guide](https://alabenaicha.me/insights/european-health-data-space-ehds-guide) for dates and obligations.

## Decision guidance

| Situation                                                                                            | Lean towards                                                     |
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
| Region or hospital group wants a vendor-neutral, long-lived record that outlives application vendors | openEHR CDR, plus a FHIR façade                                  |
| Product that mainly reads from and writes to other systems' APIs                                     | FHIR only                                                        |
| Research or registry platform that needs clinician-governed models and cross-patient queries         | openEHR (AQL), FHIR for ingestion and export                     |
| National exchange, EHDS, US payer or ONC requirements                                                | FHIR is mandatory at the boundary, whatever you store internally |
| Team without clinical modellers                                                                      | FHIR first; openEHR without modelling capacity stalls            |

Common failures in practice:

* **Mapping late.** Teams build the CDR, then discover that a FHIR profile needs a code system or cardinality their template never captured. Map the priority FHIR profiles while designing templates.
* **Local archetypes everywhere.** Forking CKM archetypes for convenience destroys the cross-system AQL benefit. Specialise or extend instead.
* **Two sources of truth.** If a FHIR façade also accepts writes, define which side is authoritative and how conflicts are versioned.
* **Ignoring terminology.** Both sides need SNOMED CT, LOINC and ICD bindings; neither format fixes local codes. The [interoperability primer](https://alabenaicha.me/insights/digital-health-interoperability-101) covers the terminology layer.

If you are deciding between a FHIR-native store and an openEHR CDR, or designing the mapping layer between them, that is the kind of architecture work covered under [digital health interoperability](https://alabenaicha.me/services/digital-health-interoperability).
