MedUX

OpenSource EMR

User Tools

Site Tools


en:dev:brainstorming

Brainstorming

Must-Haves

  • Basic Patient database: name, sex, DOB, social insurance number
  • Basic antropometrics over time: size, weight, blood pressure
  • Laboratory work: parameters, normal ranges, plausibility ranges, time lines
  • Medication handling: drug intake plans, drug prescribing & printing
  • Form handling: printing of forms (lab, letter of referral, patient anamnesis forms etc.)
  • Accounting: Ledger
  • Data access auditing: every database access must be logged: user, access target, timestamp, action.
  • Fast user switching
  • Deleting ob DB objects must be a “soft deleting”, see e.g. SoftDeletionModel

Nice-To-Haves

  • Intercommunication with encrypted XMPP/OTR, Qabel, Matrix, etc.
  • Maybe patient data sending as well with that?
  • Access to online-documentation: EBM-Guidelines, Arzneitelegamm, Scientific papers etc.
  • Management of material logistics (“Ordinationsbedarf”)
  • Drug interaction checks
  • ICD10/ICPC2 database checking
  • Accounting: Cash register (Austrian “Registrierkasse”)
  • Social insurance communications:
  • e.g. Austrian eCard interface
  • Social insurance billing management
  • Patient should have a primary, “named doctor” (which can be changed over time). This doctor e.g. gets the external findings in his list to read.
  • Referrals should open a “circle” that can be closed by a sent finding.
  • Communication with other MedUX instances via Internet. Interchange of Patient data. ActivityPub would be an option.

Technical considerations

Database & DB abstraction

An older, but well-written overview is here: http://www.pythoncentral.io/sqlalchemy-vs-orms

This post says that SQLAlchemy seems to be sluggish and overcomplicated, and prefers Storm or GeniuSQL.

Question is, wether an ORM is wanted/needed anyway or if it would be better to directly access the DB from the server/middleware. The only way *I* can think of implementing a RBAC is using an ORM/ODM - or at least a web interface (REST?) which separates the database (and server side business logic) from the client. Especially in Open Source software this is a must: If the implementation of the RBAC is on the client side, noone can ensure that there has not been tampered with the client code.

SQL

NoSQL

  • PyMongo - Python bindings for MongoDB (see the MongoDB Qt data model)
  • MongoEngine - “ORM” for MongoDB. Maps Python objects to MongoDB documents. Seems a good one to me.
  • MotorEngine - MongoEngine Port with non-blocking/asynchronous operations using tornado
  • MongoAlchemy - looks nice, and mimics the SQLAlchemy API
  • MongoKit - nice, but supposed dead.
  • RethinkDB - JSON database with builtin “reactiveness”
  • CouchDB - good at offline replication - maybe useable for mobile devices on a patient visit
  • CrateDB - extremely fast and scalable object database, but accessible using SQL; Uses Elasticsearch for fulltext searching.

Within the database there could be some kind of “namespaces”, Gnumed does this in a very clean way:

  • dem - demographic data
  • clin - all medical data (except documents)
  • blobs - documents - could be saved in an external, document-based database
  • ref - referenced data
  • cfg - configuration data
  • audit - the auditing system
  • bill - accounting data
  • mdx - MedUX-internal data
  • i18n/l10n - translation data ?
  • tmp - temporal data

Client/Server architecture / Backend

Microservices / Communication

Frontend

  • Native clients
    • Qt5, LGPL and Commercial License, C++/QML - really excellent framework, very good Python bindings:
      • PyQt5: mature, GPLv3/commercial license.
      • QtQuick - maybe we think about it. Using with Python is not that mature.
      • PySide: Dead. Not really an option, as last code update was in 2012 :-(
      • PySide2: Seems to be actively developed again by The Qt Company - maybe another option instead of PyQt5
    • Kivy - seems to be nice for games/2d stuff; but DB driven UI? …not.
  • Web clients (also possible on desktop using Electron)

Code documentation

Plugin frameworks

This meanwhile is worth an own draft page.

FHIR

FHIR (pronounced like “fire”) should be an integral part of MedUX from the start. It is an international attempt to consolidate health data of patient data in a structured manner. One possibility could be to create a FHIR implementation using Django, and pointing the frontend (Angular, native?) directly to that REST API.

Links

LOINC

All Data regarding lab results should be saved, or at least be interchangeable by the worldwide used LOINC format.

en/dev/brainstorming.txt · Last modified: 2018/03/18 12:36 by nerdoc