Skip to main content

Python implementation of the openEHR (R) standard

Project description

pyehr - a Python implementation of the openEHR® standard

GitHub Actions Workflow Status

pyehr (on pypi, pyehr-openehr) is an open source Python implementation of the openEHR® specification from the ground up in pure Python.

⚠️ Warning: pyehr is under active development and no stable release is available. Though some parts of the core are stable enough, both client and server are liable to change substantially.

pyehr is formed of three parts:

  • core - implementation of object model of BASE, RM, AM, etc. in Python
  • client - used for interacting with OpenEHR REST API servers
  • server - basic Flask-based implementation of the server standard

pyehr.core

pyehr provides an implementation of the following parts of the specification which are used by both the client and the server, and many users may wish to use in a standalone manner.

Features:

  • Work in the RM natively in Python with validation of invariants
from pyehr.core.rm.data_types.text import DVText
from pyehr.term import CodePhrase, PythonTerminologyService, CODELIST_OPENEHR_LANGUAGES, TERMINOLOGY_OPENEHR, TerminologyID

terminology_service = PythonTerminologyService(code_sets=[CODELIST_OPENEHR_LANGUAGES], terminologies=[TERMINOLOGY_OPENEHR])
text = DVText(
    value="Hello, world!",
    language=CodePhrase(
        terminology_id=TerminologyID("ISO_639-1"),
        code_string="en-gb",
        preferred_term="English (United Kingdom)"
    ),
    terminology_service=terminology_service
)
  • Serialise all classes to spec-compliant JSON (with '_type' markers)
print(json.dumps(text.as_json(), indent=1))
{
 "_type": "DV_TEXT",
 "value": "Hello, world!",
 "language": {
  "_type": "CODE_PHRASE",
  "terminology_id": {
   "_type": "TERMINOLOGY_ID",
   "value": "ISO_639-1"
  },
  "code_string": "en-gb",
  "preferred_term": "English (United Kingdom)"
 }
}
  • Use methods as described in the spec across classes
from pyehr.core.rm.data_types.quantity.date_time import DVDate, DVDuration

start_date = DVDate("2026-05-07")
duration = DVDuration("P1Y2M6D")
new_date = start_date + duration
print(str(new_date)) 

Support level

Specification part Status
Base model (BASE) ✅ Complete
Reference model (RM) ✅ Complete (aside from rm.extract and rm.integration)
Implementation technology (ITS) - JSON ✅ Serialisation complete for all implemented classes, but deserialisation still under development
Archetype model (AOM v1.4 and OPT v1.4) 🟠 Partial implementation for serialisation/deserialisation but methods unimplemented
Implementation technology (ITS) - XML 🟠 Some support for parsing AOM v1.4 archetypes and templates, limited support elsewhere
Archetype model (AOM v2) ❌ Unsupported
Archetype model (ADL v1.4 or ADL v2) ❌ Unsupported

pyehr.client

pyehr provides both a transactional REST API client as well as a more sophisticated client for working more easily with versioned objects.

Features:

  • Transactional clients for /ehr and /demographic endpoints.
from pyehr.client.ehr import OpenEHREHRRestClient, OpenEHRRestClientResponse

client = OpenEHREHRRestClient(
    base_url="https://sandbox.ehrbase.org/ehrbase/rest/openehr/v1"
)

response : OpenEHRRestClientResponse = client.ehr.create_ehr()

print(response.pyehr_obj[0].as_json())
  • More object-oriented client for working with versioned objects more natively
from pyehr.client.change_control import VersionedStoreClient

store = VersionedStoreClient(
    base_url="http://localhost:5000"
)

p1 = ...

log.info("Create PERSON in store")
object_version_id, contribution, versioned_object = store.create(
    obj=p1,
    owner_id=ObjectRef("local", "EHR", GenericID("null", "null")),
    committer=PartySelf(),
    lifecycle_state=VersionLifecycleState.INCOMPLETE
)

pyehr.server

pyehr provides an under-development Flask-based server with accompanying database and authentication backends.

Disclaimer

openEHR® is the registered trademark of the openEHR Foundation and is used with the permission of openEHR International. Use of the trademark does not constitute endorsement of this product by openEHR International or openEHR Foundation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyehr_openehr-0.0.2.tar.gz (303.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyehr_openehr-0.0.2-py3-none-any.whl (236.5 kB view details)

Uploaded Python 3

File details

Details for the file pyehr_openehr-0.0.2.tar.gz.

File metadata

  • Download URL: pyehr_openehr-0.0.2.tar.gz
  • Upload date:
  • Size: 303.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for pyehr_openehr-0.0.2.tar.gz
Algorithm Hash digest
SHA256 797befdae58fc248781ad56555992ff367e1dd871cf7c9a27176382d7c8f19f1
MD5 a905cb5e7ca5dd249d23f6adf5f95438
BLAKE2b-256 972aba033dc3ac6927aacafad28395a08c40c0ea43bedaec05b1dc0c391f2f6f

See more details on using hashes here.

File details

Details for the file pyehr_openehr-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: pyehr_openehr-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 236.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for pyehr_openehr-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 89f934d3e2859b06dcf7ae7f8111c1230ab08c27709c09963336915a6a03366e
MD5 39b0db635ed37929225c485e10e1a2a0
BLAKE2b-256 bcf0574b8c815f6604c7d0f18b76ccc0a0f59b2faac34f477abd21b41291995b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page