Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Current »

h1. Key repositories

The code for O3 is hosted in a number of community-maintained GitHub repositories. The O3 application uses a microfrontends-based architecture. This means that is made up of many smaller, independent applications called "frontend modules". These frontend modules are grouped into different repositories based on which part of O3 they support.

The code in each repository is focused on a particular concern. For example, the [Patient Chart|https://github.com/openmrs/openmrs-esm-patient-chart ] repository contains frontend modules for the features of the patient chart, such as allergies, appointments, conditions, forms, medications, notes, programs, test results, and vitals. This is an example of a monorepo, where multiple packages are contained in a single repository; most O3 repositories are structured in this way. The [Core|https://github.com/openmrs/openmrs-esm-core ] repository is special. It contains a few frontend modules, but also the core application logic that loads frontend modules, as well as the [O3 tooling|https://github.com/openmrs/openmrs-esm-core/tree/main/packages/tooling/openmrs ] and the [JavaScript API|https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-framework/docs/API.md ].

h2. Key Repositories Overview

  • [Core|#core] - contains frontend modules for low-level concerns such as authentication. It also contains the base application which loads and stitches together all frontend modules, the app shell. This app shell provides the JavaScript library @openmrs/esm-framework, which provides for essential cross-cutting concerns such as configuration, internationalization, feature flagging, and global state management. This repository also contains the tooling for O3.

  • [Home|#home] - renders the UI for the landing page after the user logs in. Implementers can customize this page to render dashboards for things like appointments, patient lists, service queues, data visualizations, and more.

  • [Template|#template] - a starter template repository that is designed to be forked and used as template for new frontend modules. It contains all the boilerplate configuration needed to get a new frontend module up and running.

  • [Patient Chart|#patient-chart] - aggregates frontend modules that altogether constitute the patient dashboard, including widgets for attachments, allergies, appointments, conditions, forms, immunizations, medications, notes, programs, test results, and vitals.

  • [Patient Management|#patient-management] - aggregates frontend modules that handle concerns related to patient management such as appointment scheduling, searching for patients, managing patient lists, registering new patients, and managing service queues and wards.

  • [Laboratory App|#laboratory-app] - A frontend module for managing laboratory requests and queues built on OpenMRS 3.x

  • [Angular Form Engine|#angular-form-engine] - a form engine library built in Angular. It leverages Angular's powerful support for forms to provide a robust solution with capabilities such as field validation, injection of custom data sources, conditional rendering, historical expressions, and more.

  • [React Form Engine|#react-form-engine] - a form engine library built in React. The RFE is the successor to the Angular Form Engine and is built on top of a modern technology stack with the goal of providing fast, performant, and more flexible form rendering capabilities.

  • [Form Builder|#form-builder] - enables users to build OpenMRS form schemas interactively using an embedded JSON schema editor or an interactive builder UI. It also provides a render tab that renders your form schema using the React Form Engine. Users can publish their schemas to their backend server, enabling them to access their forms and collect data in the patient chart in the Clinical Forms workspace.

  • [Fast Data Entry app|#fast-data-entry] - enables retrospective data entry workflows. Powered by the Angular Form Engine.

  • [Medication Dispensing app|#medication-dispensing] - enables implementers to track medication dispensed within OpenMRS.

  • [O3 Distro Reference application|#distro-reference-application] - the reference implementation of O3. Implementers can use this as a starting point for their own distributions.

  • [Admin Tools|#admin-tools] - renders an interstitial page that links users to various frontend modules that aren't part of the core EMR such as the Form Builder, Cohort Builder, OCL Management dashboard, Stock Management dashboard, and more. It also provides a link to the O2 Legacy Admin UI for admin users.

  • [Cohort Builder|#cohort-builder] - a tool that enables users to build and manage dynamic patient cohorts (groups) of patients based on multiple clinical and demographic criteria.

  • [Module Management|#module-management] - a learning frontend module based on the legacy OpenMRS Module management UI. The code in this repo is annotated with comments and can serve as a good starting point for new developers looking to understand how to build frontend modules.

  • [Frontend RFC|#frontend-rfc] - a repository where architectural decisions affecting technologies and processes that apply to all new O3 distributions are first presented, argued, and finally agreed upon via consensus.

  • [JSON Schemas|#json-schemas] - a repository that hosts [standard JSON schemas|https://json-schema.org/ ] used in OpenMRS. These schemas are used to provide auto-completion and validation capabilities when editing routes registry files for O3 frontend modules and O3 form schemas.

h2. Core

Core contains both typical frontend modules as well as packages that don't render UIs. Typical frontend modules include:

In addition to these UI-related packages, Core also includes the following non-UI packages:

h2. Home

Contains the [home|https://github.com/openmrs/openmrs-esm-home/tree/main/packages/esm-home-app ] frontend module, which renders the landing page that users get to after successfully logging in. This page has a left nav menu with entries for appointments, patient lists, and service queue applications.

By default, you'll see an active visits widget and a widget for the appointments scheduled for that day in the UI. The [configuration schema|https://github.com/openmrs/openmrs-esm-home/blob/main/packages/esm-home-app/src/openmrs-esm-home-schema.ts ] for the home app allows developers and implementers to configure which URL to navigate the user to after they click on a search result following a patient search. By default, the user will get navigated to the patient chart. The side menu and home dashboard expose extension slots into which dashboards from the [Patient Management|/docs/key-repositories#patient-management] repo plug into. These include dashboards for Appointments, Laboratory Patient Lists, Service Queues and Wards.

h2. Template

A [starter template|https://github.com/openmrs/openmrs-esm-template-app ] repository that is designed to be forked and used as template for new frontend modules. It will be most developers' first foray into O3. Most components in the template app are annotated with useful comments that serve as a guide for developers working on the application. Because the template app is in fact a template, you can generate your own frontend module by forking it and using it as a template.

h2. Patient Chart

Contains various frontend modules that constitute widgets in a patient dashboard. These widgets include:

In addition to these widgets, two other microfrontends exist that encapsulate cross-cutting concerns. These are:

h2. Patient Management

This monorepo includes the following frontend modules:

h2. Laboratory App

The [Laboratory app|https://github.com/openmrs/openmrs-esm-laboratory-app ] provides a UI for managing laboratory requests and queues. It includes the following widgets:

h2. Angular Form Engine

The [Angular Form Engine|https://github.com/openmrs/openmrs-ngx-formentry ] is a form engine solution originally built by AMPATH. It leverages Angular's forms capabilities to build a fully-fledged form engine with capabilities such as field validation, injection of custom data sources, conditional rendering, historical expressions, and more. Forms built using the form engine get rendered in the Clinical Forms workspace in the patient chart. The patient chart provides a wrapper [Form Entry|https://github.com/openmrs/openmrs-esm-patient-chart/blob/main/packages/esm-form-entry-app ] Angular micro frontend that consumes the form engine library and exposes its functionality via a Single SPA parcel. This allows the form engine to be consumed by the patient chart as a micro frontend. To learn more about the Angular Form Engine, check out its [README|https://github.com/openmrs/openmrs-ngx-formentry/tree/main/README.md ] and [technical roadmap|https://github.com/openmrs/openmrs-ngx-formentry/issues/90 ]. You can learn more about the Angular framework [here|https://angular.dev/ ].

h2. React Form Engine

The [React Form Engine|https://github.com/openmrs/openmrs-form-engine-lib ] is a library that enables creating and rendering medical forms within O3. It provides a flexible, JSON-based form schema with built-in validation, conditional rendering, and multilingual support. O3 form schemas conform to the [O3 standard JSON schema spec|https://github.com/openmrs/openmrs-contrib-json-schemas/blob/main/form.schema.json ] which defines the structure and constraints of the form data. Learn more about the React Form Engine from the [official docs|https://openmrs.atlassian.net/wiki/spaces/projects/pages/68747273/O3+Form+Docs ]. The [O3 reference application|https://o3.openmrs.org/openmrs/spa ] ships an embedded [Form Builder|https://github.com/openmrs/openmrs-esm-form-builder ] to make building forms easy.

h2. Form Builder

The [Form Builder|https://github.com/openmrs/openmrs-esm-form-builder%5D is a frontend module used to create OpenMRS form schemas, for use with the [React Form Engine|/docs/key-repositories#react-form-engine]. It enables users to both create new schemas and edit existing ones. It provides an embedded code editor that facilitates writing JSON code, and a WYSIWYG schema builder interface where users can construct a schema interactively without writing code. Schemas built using the Form Builder can be persisted to the server, and optionally published, which makes them available to the frontend via the forms widget. The React Form Engine is used in the Form Builder to validate and test forms directly in the Form Builder UI.

h2. Fast Data Entry

The [Fast Data Entry app|https://github.com/openmrs/openmrs-esm-fast-data-entry-app%5D is a frontend module that provides a natural workflow for entering many pre-recorded forms at a time. It is not meant for point-of-care workflows, but rather as a way to do retrospective data entry. It also can be used for the rapid input of forms for group sessions.

h2. Medication Dispensing

The [Medication Dispensing app|https://github.com/openmrs/openmrs-esm-dispensing-app%5D is a simple tool for tracking dispensed medications. It's designed to serve small sites that don't want to deal with implementing a whole external supply chain/ERP system. It simply tracks what needs to be dispensed and what has already been dispensed. The primary target users for this functionality are implementations and facilities that have an on-site pharmacy and don't charge the patient/customer for the services, and who want to dispense medications based on orders within the same OpenMRS instance. Billing and inventory are out of scope.

h2. Distro Reference Application

This project holds the build configuration for the OpenMRS 3.0 reference application, found on https://dev3.openmrs.org and https://o3.openmrs.org. This distribution consists of four docker images:

  • db - This is just the standard MariaDB image supplied to use as a database

  • backend - This image is the OpenMRS backend. It is built from the main Dockerfile included in the root of the project and based on the core OpenMRS Docker file. Additional contents for this image are drawn from the distro sub-directory which includes a full Initializer configuration for the reference application intended as a starting point.

  • frontend - This image is a simple nginx container that embeds the 3.x frontend, including the modules described in the file.

  • proxy - This image is an even simpler nginx reverse proxy that sits in front of the backend and frontend containers and provides a common interface to both. Basically, this helps mitigate CORS issues.

h2. Admin Tools

Originally conceived as a way to provide a UI for the legacy admin tools, the [Admin Tools|https://github.com/openmrs/openmrs-esm-admin-tools%5D provide an interstitial page that links the user to non-core EMR apps such as the Cohort Builder, Form Builder, Legacy Admin UI, OCL Management page, and more. It also contains the OCL frontend module.

h2. Cohort Builder

The [Cohort Builder|https://github.com/openmrs/openmrs-esm-cohortbuilder%5D leverages the Reporting Compatibility module to enable users to perform ad-hoc queries for patients with defined characteristics and combine multiple queries into more complex ones.

h2. Module Management

The [Module Management|https://github.com/openmrs/openmrs-esm-module-management-app%5D frontend module is meant to serve as a learning resource for our coding conventions and best practices when building a microfrontend.

This app is based on the System Administration Manage Module management page from the legacy 2.x reference application. It allows users to manage modules. It lists all the installed modules and allows admin users to control modules using @Start@, @Stop@ and @Unload@ actions. Users can also view detailed information about the listed modules. This includes metadata such as the @module author@, @version@, required OpenMRS @version@, and more.

h2. Frontend RFC

A [repo|https://github.com/openmrs/openmrs-rfc-frontend%5D where the technologies and processes that apply to all new OpenMRS distributions are explained. The purpose of this repo is to:

  1. Provide a way to enact change in the OpenMRS frontend.

  2. Clarify what things we are aligned on across all of OpenMRS so that everything else can be decided by the individual modules and distributions.

The RFC process was successful in setting up the frontend architecture, and the merged pull requests form a great resource for anyone wishing to understand how we got to where we are today.

h2. JSON Schemas

A [repo|https://github.com/openmrs/openmrs-contrib-json-schemas%5D that hosts standard JSON schemas used in OpenMRS. These schemas then get published via a web-accessible URL. For example, the standard [routes schema|https://github.com/openmrs/openmrs-contrib-json-schemas/blob/main/routes.schema.json%5D is used to provide auto-completion and validation capabilities when editing a @routes.json@ file in your IDE.

  • No labels