Modular Architecture [Notes]

Overview

Module Overview

Result of Deep Dive 2022-09-08

Rework and preparation for follow-up Deep Dive sessions

 

Definitions

Term

Definition

Term

Definition

Module

Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality.

Source: https://en.wikipedia.org/wiki/Modular_programming

(Software) Package

A collection of functions written in a single language bundled with additional content like documentation, unit test, sample data etc.

Source: https://en.wikipedia.org/wiki/Package_development_process

Component

An individual software component is a software package, a web service, a web resource, or a module that encapsulates a set of related functions (or data).

Source: https://en.wikipedia.org/wiki/Component-based_software_engineering#Software_component

Sources

Technical source code, structures and definitions of an IT solution

(JLN) Business Process

 

Functional Unit

An interchangeable unit that provides a piece of business functionality

(Software) Repository

A storage location for software packages & other technical sources

Source: https://en.wikipedia.org/wiki/Software_repository

Key Questions

  • How to find a wording which is clear and prevents misunderstanding and allows for a common language between business (implementers) and technical (developer) people?

  • How to achieve an up-to-date documentation of the architecture and it’s features (modules) which satisfies and links the needs of implementers and developers

Key Findings

Many things are called a “Module”, but a clear definition is missing
Repositories/Deployables in https://openimis.atlassian.net/wiki/spaces/OP/pages/3399614465 were called modules before despite covering many aspects (FE, BE, DB, tools, core, assembly/configuration, docker)
Towards non-IT people a module is a unit of functionality covering a business/domain aspect such as a process (Claims, Calculations) or an entity
It is hard to understand what modules are out there and which are optional, configurable, customizable and so on
Documentation of the modules/features is fragmented, outdated and incomplete
Dependencies (repositories) are missing
An overview of modules is missing
Linkage to business processes (e.g. JLN) is missing or incomplete
Link to the technical (code) documentation is missing
History (change log) and linkage to https://openimis.atlassian.net/wiki/spaces/OP/pages/1322221610 is missing
The software architecture is only documented in https://openimis.atlassian.net/wiki/spaces/OP/pages/586383361 out of the perspective of a future development (https://openimis.atlassian.net/wiki/spaces/OP/pages/494338053), not as something that exists as part of the product and seemed to be not actively maintained / updated

Findings

Module pages under https://openimis.atlassian.net/wiki/spaces/OP/pages/589561955 do not share a common structure / content
Use of property tables seems advisable
Overview in https://openimis.atlassian.net/wiki/spaces/OP/pages/589561955 uses color coding without providing an explanation (types of modules like Core, Interop, Business, ??)
Linkage between “Modules” and Repositories unclear / Dependencies are not documented
Definitions unclear, what is a “Module”?
What is the bare minimum a module must provide? What are the key features? Interfaces, etc.?
What principles are followed to define what is part of one module, but not of an other?
Relationship to “Repositories” and other modules
Are there different types? Which?
Is the module configurable/customizable? On a technical level or from a business perspective?
Is the module optional? Is there a choice of different modules (e.g. FHIR version)?
If a (business) is an abstract bracket around repositories, does it have a version number? How to tell if the “module” is still compatible to the rest of the system?
https://openimis.atlassian.net/wiki/spaces/OP/pages/3294756865 lists repositories as “Components” (renamed from “Module”)
Multiple modules under https://openimis.atlassian.net/wiki/spaces/OP/pages/589561955 seem to be outdated and incomplete, are not separately documented, but mixed with other “Modules”
Modules under https://openimis.atlassian.net/wiki/spaces/OP/pages/589561955 are organized in a complex but incoherent structure (e.g. sometimes grouped by business process or other)
Modules under https://openimis.atlassian.net/wiki/spaces/OP/pages/589561955 do not follow a consistent naming format
Modules under https://openimis.atlassian.net/wiki/spaces/OP/pages/589561955 are not always described separately, but mixed (failed separation of concerns SoC?)
Some modules under https://openimis.atlassian.net/wiki/spaces/OP/pages/589561955 do not match to the diagram
Some modules under https://openimis.atlassian.net/wiki/spaces/OP/pages/589561955 contain overly technical (source code, stored procedures) details

Related topics from Developer Committee

  • DC #224 Testing Scenarios

  • DC #288 Implementer Documentation

  • DC #274 Default Module Configuration

  • DC #260 Documentation Platform

  • DC #105 List of modules / JLN Business Process Mapping

Related Sources

Source

Content / Findings

Source

Content / Findings

Describes “Modularity” as

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.

Software Component and Entity levels modularity are fully in the scope (controlled by) of 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 plugins of a core platform.

The core platform provides generic components (building blocks) to be used by / particularised in the various plugins and is split in 3 layers:

  • Frontend(s) layer

  • Backend layer

  • Database layer

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:

 

Plugins are documented in openIMIS Modules.

 

https://openimis.atlassian.net/wiki/spaces/OP/pages/589561955

In openIMIS, (nearly) everything is a module: even "low level" (and mandatory) features follow this principle.

Plugins (can) provide several types of archetypes, dedicated to the various openIMIS layers: openIMIS Mobile FE, openIMIS Web FE, openIMIS Online BE, openIMIS Batch BE,...

openIMIS can be deployed with an extra layer dedicated to implement a FHIR API, based on openIMIS core (base) modules.

 

 

 

@Patrick Delcroix in the comments:

Here my point of view on the module list details in 4 groups (core, business...)

The module with * leading are not found in JLN

IT core

  • *Core & security

    • Database access,

    • Logins, user, roles including enrolment office & claim admin,

    • Email

Business

  • Claims Management

    • Claim,

    • Feedback,

    • Review

    • Appeal (not available)

  • Scheme Policy

    • Insurance companies (not available), 

    • provider policies settings,

      • Product

    • Eligibility Requirements,

      • Product

    • Benefit Package Formulary

      • Product

    • provider rates

      • Price lists (Item and services),

    • Funding

  • Premium Collection ,

    • Payer

    • Policy payment

  • Beneficiary Management

    • Insures,

    • Group,

    • Policy,

    • Renewal

 

Register

  • *Locations (regions … )

  • Provider Management

  • *Client registry

  • *Medical item

  • *Medical Service

  • *Diagnosis

 

Reporting

https://openimis.atlassian.net/wiki/spaces/OP/pages/807600219

https://openimis.atlassian.net/wiki/spaces/OP/pages/807698543

https://openimis.atlassian.net/wiki/spaces/OP/pages/945422345

https://openimis.atlassian.net/wiki/spaces/OP/pages/3399614465

  • Single repositories were named “Module” now “Component”

    • Not all repositories contain source code, some are used for databases, package linkage, docker scripts etc.

https://openimis.atlassian.net/wiki/spaces/OP/pages/943292424

  • Refers to frontend and backend “Modules”

https://www.youtube.com/watch?v=JdmsB7CFEhY

  • Explains the modular architecture where backend “modules” contribute to each other to provide functionality

  • Frontend assemblies are following the same modular programming paradigm and are considered “modules” as well in this scope

List of modules under https://openimis.atlassian.net/wiki/spaces/OP/pages/589561955

Module

Content / Finding

“Modules” in diagram

Module

Content / Finding

“Modules” in diagram

https://openimis.atlassian.net/wiki/spaces/OP/pages/807632949

Claim

“Beneficiary Enrollment” \ https://openimis.atlassian.net/wiki/spaces/OP/pages/1365999627

  • Seems outdated (last change in 2021)

    • Refers to legacy code

    • Refers to functional spec from 2017

    • Refers to Windows service

  • Seems incomplete (contains remarks, questions and/or arbitrary formatting)

  • Top-Level-Content: Business definition of the policy dates, Access Rights, Actors & Rights, Policy Management Features

Policy

“Beneficiary Enrollment” \ https://openimis.atlassian.net/wiki/spaces/OP/pages/1366228996

  • Seems outdated (last change in 2020)

    • Refers to legacy code

    • Refers to functional spec from 2017

    • Contains old screenshots

  • Seems incomplete (contains remarks, questions and/or arbitrary formatting)

  • Mixes two “Modules”

Persons - Missing in diagram

Families - Missing in diagram

“Beneficiary Enrollment” \ https://openimis.atlassian.net/wiki/spaces/OP/pages/1366163471

  • Seems outdated (last change in 2020)

    • Refers to legacy code

    • Refers to functional spec from 2017

    • Contains old screenshots

  • Seems incomplete (contains remarks, questions and/or arbitrary formatting)

  • Mixes two “Modules”

Contribution

Payment

“openIMIS Administration Modules” \ https://openimis.atlassian.net/wiki/spaces/OP/pages/3067543561

  • Does not document the module, but a proposal -> Documentation is missing

Product

“openIMIS Administration Modules” \ https://openimis.atlassian.net/wiki/spaces/OP/pages/920584218

  • Seems outdated (last change in 2019)

    • Refers to legacy application

  • Seems incomplete (contains remarks, questions or arbitrary formatting and / or seems overly brief)

  • Mixes two “Modules” or naming issue?

Location

Health Facilities - Missing in diagram

https://openimis.atlassian.net/wiki/spaces/OP/pages/1448542777

  • Describes a project

Claim AI - Missing in diagram

https://openimis.atlassian.net/wiki/spaces/OP/pages/943292424

  • Seems outdated (last change in 2019)

  • Unclear scope, not describing a module

 

https://openimis.atlassian.net/wiki/spaces/OP/pages/868417563

  • Mixes two “Modules”

FHIR V3

FHIR V4

https://openimis.atlassian.net/wiki/spaces/OP/pages/2614362157

  • Mixes multiple “Modules”

  • Seems incomplete (contains remarks, questions or arbitrary formatting and / or seems overly brief)

Invoice

Others? (e.g. Contribution Plan ?)

https://openimis.atlassian.net/wiki/spaces/OP/pages/1730740234

  • Seems incomplete (contains remarks, questions or arbitrary formatting and / or seems overly brief or overly technical)

Calculations

https://openimis.atlassian.net/wiki/spaces/OP/pages/1730740273

  • Seems incomplete (contains remarks, questions or arbitrary formatting and / or seems overly brief or overly technical)

Contract

https://openimis.atlassian.net/wiki/spaces/OP/pages/1730740256

  • Seems incomplete (contains remarks, questions or arbitrary formatting and / or seems overly brief or overly technical)

Policy Holder

https://openimis.atlassian.net/wiki/spaces/OP/pages/1730740289

  • Seems incomplete (contains remarks, questions or arbitrary formatting and / or seems overly brief or overly technical)

Policy Holder Portal - Missing in diagram

https://openimis.atlassian.net/wiki/spaces/OP/pages/3051225101

  • Seems incomplete (contains remarks, questions or arbitrary formatting and / or seems overly brief or overly technical)

Bulk CHFID Generator- Missing in diagram

https://openimis.atlassian.net/wiki/spaces/OP/pages/3144515592

  • Seems incomplete (contains remarks, questions or arbitrary formatting and / or seems overly brief or overly technical)

    • “Under construction”

Claim Batch

https://openimis.atlassian.net/wiki/spaces/OP/pages/3361669121

  • Seems incomplete (contains remarks, questions or arbitrary formatting and / or seems overly brief or overly technical)

Report

Missing modules from diagram

  • Module page is missing (or mixed in)

  • Language Packs

  • Insuree

  • Insuree Batch

  • Core

  • Payer

  • Medical

  • Medical Pricelist

  • Tools / Home

  • Contribution Plan

Missing modules on the diagram?

 

 

Did you encounter a problem or do you have a suggestion?

Please contact our Service Desk



This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. https://creativecommons.org/licenses/by-sa/4.0/