Structural Overview of the GNUmed Software System

GNUmed is based on the client-server architecture. The server is represented by a PostgreSQL database while the client is a desktop application written in Python.


The database schema is kept under version control (git). Each and every tagged and released version is available and can be reconstructed.

Any version can be rolled forward to any other version without data loss (except for bugs). Version roll back is not available.

Major version upgrades are non-destructive: the database is cloned, renamed, and upgraded.

Minor upgrades are ephemereal only (views, functions, NOT tables) and idempotent (can be re-run any number of times against any minor version within the major release).

The database is fully utilized and not only a dumb data dump. PostgreSQL features are exploited, but standard (or at least well-established) SQL is used wherever possible.

Access permissions are enforced at the server level, not only inside the application. Application users map to database accounts 1:1. Normal application users do not have database superuser permissions.

Business constraints are enforced at the database level, where sensible.

There is no application server sitting between clients and the database.


The client application is written in Python3 with the wxPython4 UI toolkit and the psycopg2 DBAPI adapter. Code is kept under version control (git). The database is accessed directly, using SQL, without the help of a (generic) ORM.

The code is grouped in three major areas: common, business, UI.

The pycommon modules contain non-specific python code.

The business modules encapsulate all business logic and provides a middleware layer between database and user interface. It offers business functionality via classes and methods thereof and turns those into SQL code as needed.

The user interface wxpython modules are based on the wxPython toolkit and map business functionality into user interaction widgets. wxGlade is used to generate widgets, which are then subclassed to provide functionality. While the interface is certainly domain-specific, and a few medical concepts will need to be understood to effectively use it, it is intended to be non-surprising to a medically trained user.

Access permissions are checked in the client (but are still enforced in the server, regardless of what the client attempts to do).
Topic revision: 09 Mar 2019, KarstenHilbert
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback
Powered by Olark