🔓 Open Source Release: This project is available under the MIT License.
🧠 Project Lead: Maintained by Michael Anywar — Healthcare Technology Researcher at Tallinn University of Technology
📫 Contact: michael.anywar@alpamax.eu
ALUR stands for:
AQL-based
Logical
Unified
Routing
ALUR is a modular, query-driven engine for transforming openEHR data into FHIR-compliant resources. It enables secure, selective, and reusable extraction of clinical data from openEHR CDRs using AQL, mapping the results to FHIR using YAML. Supports both real-time and scheduled processing.
Highlights:
- Selective pseudonymization (GPAS or AES)
- YAML-based custom FHIR mappings
- Consent provision nesting support
- Secure, reproducible, and scalable
- AQL-based integration with openEHR CDRs
- Jinja2 + YAML driven FHIR resource mapping
- GPAS / AES support for pseudonymization
- Provision-aware Consent transformation
- Rotating logs and interval-based scheduling
- Compatible with both Docker and Python dev environments
docker pull alpamaxeu/alur:latestCreate required folders on your host:
sudo mkdir -p /opt/alur/{data,logs,conf/environment/cert,conf/environment/key,resources}Then launch using Docker Compose (see docker-compose.yml):
docker-compose up -dgit clone https://github.com/alpamax/ALUR.git
cd ALUR
./run.shpython3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
export $(cat application/conf/environment/.env | xargs)
python application/main.pyEdit the following files:
application/conf/settings.yml— fetch intervals, logicapplication/conf/environment/.env— DB + endpoint configapplication/resources/*.yml— FHIR mapping templates
Example .env:
DB_HOST=db
DB_PORT=5432
DB_NAME=alur
DB_USER=aluruser
DB_PASSWORD=alurpassword
FHIR_BASE_URL=http://your.fhir.server/fhir- Groups records by
composition_idor configurable key - Uses
identifierto detect existing Consent - Generates full
provisionnesting - Uses
committed_dateTimeforConsent.dateTime
- Logs stored in
/opt/alur/logs/ - Rotated daily, kept for 30 days
- Controlled via
settings.yml
- GPAS integration via certificate-based SOAP
- AES encryption with auto key at
conf/environment/key/key.bin - No PHI stored locally
extension:
- url: "http://example.org/fhir/StructureDefinition/custom-flag"
valueBoolean: "{{ has_custom_flag }}"coding:
- system: "{{ system }}"
code: "{{ code }}"
display: "{{ display }}"
extensions:
- url: "http://fhir.com/StructureDefinition/icd-10-gm-manifestations"
valueCoding:
system: "http://fhir.com/codeSystem/icd-10-gm-manifestationscoding"
code: "{{ display }}"
display: "{{ code }}"- 🔌 Check
.envif DB or endpoint fails - 🔐 Ensure
key.binexists for AES - 📤 Validate YAML mapping structure
- 🧩 Use correct
value[x]in extensions - 🧪 Confirm
provision: "{{ provision }}"is in mappings
Update dependencies with:
pip freeze > requirements.txtrun.sh– prepare folders, run, wait for DB, tail logsstop.sh– gracefully shut downMakefile– shortcut:make run,make stop,make logs, etc.
- CI builds and pushes hardened image (stripped
.py, compiled.pyc) - See
.github/workflows/alur.ymlfor details
We welcome contributions!
Open issues, suggest improvements, or submit a pull request.
MIT License — See LICENSE file.
Michael Anywar
michael.anywar@alpamax.eu
https://www.alpamax.eu