REST API 1.1.0
EHR, EHR_STATUS, COMPOSITION, DIRECTORY, CONTRIBUTION, query, template and admin resources — canonical JSON and XML on the wire.
openEHR separates clinical knowledge from software: applications store and query structured health records through a vendor-neutral REST API and the Archetype Query Language. FerroEHR implements that standard natively in Rust — headless, API-first, one static binary on PostgreSQL 18.
No JVM · no runtime dependencies · every compliance claim machine-verified.
Generated from the official machine-readable models — a specification update is a regeneration, not a rewrite.
EHR, EHR_STATUS, COMPOSITION, DIRECTORY, CONTRIBUTION, query, template and admin resources — canonical JSON and XML on the wire.
Typed path analysis over a spec-generated Reference Model, compiled to efficient SQL — including ALL_VERSIONS and stored queries.
Contribution-atomic commits, indelible version history, logical delete, attestations and per-version digital signatures.
OPT 1.4 ingestion, WebTemplate generation and deep composition validation against archetype constraints and terminology bindings.
Predictable memory, fast cold starts, a minimal distroless image — no garbage-collection pauses in the write path.
Temporal versioning with database-enforced non-overlap, UUIDv7 keys and canonical openEHR JSON stored verbatim.
OIDC authentication, RBAC/ABAC authorization, multi-tenancy and IHE ATNA audit — production access control, not an afterthought.
FHIR R4 connectors, AMQP change events and S3 multimedia storage — bridge openEHR into the systems around it.
The full stack — server plus PostgreSQL 18 — with Docker Compose.
$ docker compose up --build
# Probe the status endpoint
$ curl http://localhost:8080/ferroehr/rest/status
# Create an EHR (development credentials: ferroehr / ferroehr)
$ curl -u ferroehr:ferroehr -X POST -i \
http://localhost:8080/ferroehr/rest/openehr/v1/ehr
# Query it with AQL
$ curl -u ferroehr:ferroehr -H 'Content-Type: application/json' \
-d '{"q":"SELECT e/ehr_id/value FROM EHR e"}' \
http://localhost:8080/ferroehr/rest/openehr/v1/query/aql