This page provides a high-level (introduction) view of the OpenIMIS openIMIS targeted (modular) architecture.
The transition (transformation) plan from current (2018) OpenIMIS openIMIS implementation to this architecture is described in a separated page: Modular Transformation.
...
Modularity (and its integration counter-part) is considered at 3 distinct levels:
Solution level, considering the solution as a coherent assembly of Software Components, like Client Registry, Shared Health Record system, Universal Health Coverage,...
Software Component level, where components are decomposed into (activated or not) modules dedicated to fulfil the expected scope for them
Entity level, where each concept hosted by a Software Component can be particularised to the specific needs of an implementation.
Solution level
At Solution level, the roadmap clearly position OpenIMIS openIMIS as a component of OpenHIE platform.
The expected modularity at that level is achieved by:
conforming to the OpenHIE platform standards (enforced via the OpenHIE Integration Layer)
adopting the FHIR existing standards to expose
OpenIMISopenIMIS - managed concepts
Software Component & Entity levels
Software Component and Entity levels modularity are fully in the scope (controlled by) of OpenIMISopenIMIS.
OpenIMIS openIMIS is built modular "from the core on": even low level features (like login,...) and central features (like Insurance Scheme management,...) are built as a module plugins of a core platform.
The core platform provides generic components (building blocks) to be used by / particularised in the various modules plugins and is split in 3 layers:
Frontend(s) layer
Backend layer
Database layer
Frontend(s)
Modularity at frontend layer is achieved by assembling (UI) components in various technology stacks:
- web-application
- mobile application
- plugin of other platforms (DHIS2 app)
OpenIMIS FE core provides:
- building blocks to address topics such as:
- I18N
- standard types components (like period selection, amounts,...),...
- generic technical components (like confirmation dialog, user notification, error handling,...)
- transversal features related to:
- User & Security (login, profile, roles,...)
- Menus
- Job scheduler
- Administration (install and configure modules,...)
Each OpenIMIS FE module is standardised to
- expose (and register to) contribution points
- provide components for managed entities (claim picker, claim "row" representation,...)
- allow built-in or overloaded extensibility
Backend (api)
Modularity in backend layer is built around an (internal) bus, where modules emit and subscribe to events.
OpenIMIS BE core provides:
- building blocks to address topics such as:
synchronous/asynchronous messages (events) to/from other Software components and other OpenIMIS modules
- transversal features related to:
- User & Security (login, profile, roles, audit,...)
- Job scheduling, monitoring,...
- Transaction and error management
Each OpenIMIS FE module is standardised to
- expose (automated) REST Api (aligned to DHIS2 way of working?)
- allow built-in or overloaded extensibility
- implement ORM and database migrations
Database
OpenIMIS is based on a relational database, with enforced good practices:
- instance-agnostic id (UUID)
- managed indexes and foreign keys (even cross-modules!)
OpenIMIS is NOT
...
Although openIMIS is an assembly of components (themselves assemblies of plugins), deployments of openIMIS doesn't impose a distributed deployment.
The choice of isolating the various (server-side) components to dedicated infrastructure is taken according to each project's needs.
Within a project, scaling up by distributing components as the load increases is a very standard (and easy) operation:
...
Further Links
Frontend(s) Target Architecture
Backend (API) Target Architecture
openIMIS is NOT
multi-tenant: while database table will receive a tenant-discriminant (index) column, being multi-tenant requires several precautions we are not going to address in early project phases (like computing/ IO resources sharing, forced coordinated upgrades,...)