diff --git a/docs/assets/images/favicon.png b/docs/assets/images/favicon.png
index b3677ea..becf92c 100644
Binary files a/docs/assets/images/favicon.png and b/docs/assets/images/favicon.png differ
diff --git a/docs/assets/logo.png b/docs/assets/logo.png
index c125718..d37eb09 100644
Binary files a/docs/assets/logo.png and b/docs/assets/logo.png differ
diff --git a/docs/config-points.md b/docs/config-points.md
new file mode 100644
index 0000000..8dc9356
--- /dev/null
+++ b/docs/config-points.md
@@ -0,0 +1,106 @@
+# :construction: Configuration Points
+
+In this section, we provide a comprehensive list of configuration points available in Ozone, organized by EIP services and thereby grouped by pairs of apps.
+
+---
+
+!!! info inline end ""
+
+ {==:oz: Pro==}
+
+## Keycloak-Superset Flows
+
+###### `superset.polling-interval`
+
+- _Location:_
+`ozone/distro/configs/eip-keycloak-superset/properties/application.properties`
+- _Possible values:_
+The time in milliseconds. Defaults to 30000 – Controls the polling interval for the `eip-keycloak-superset` service, which regularly fetches the set of roles from Superset to synchronize them with Keycloak.
+
+!!! tip "Sample configuration:"
+
+ ```java
+ superset.polling-interval=30000
+ ```
+
+---
+
+## ERPNext-OpenMRS Flows
+
+###### `erpnext.openmrs.enable.patient.sync`
+
+- _Location:_
+`ozone/distro/configs/eip-erpnext-openmrs/application.properties`
+- _Possible values:_
+ * [x] `false` – An OpenMRS patient is synchronised as an ERPNext customer when a first billable item is ordered from OpenMRS.
+ * [ ] `true` – An OpenMRS patient is always synchronised as an ERPNext customer.
+
+!!! tip "Sample configuration:"
+
+ ```java
+ erpnext.openmrs.enable.patient.sync=false
+ ```
+
+---
+
+## Odoo-OpenMRS Flows
+
+###### `concept.complex.uuid`
+
+- _Location:_
+
+- _Possible values:_
+
+
+###### `create.customer.if.not.exist`
+
+- _Location:_
+
+- _Possible values:_
+
+
+###### `emr.weight.concept`
+
+- _Location:_
+
+- _Possible values:_
+
+
+###### `openmrs.identifier.type.uuid`
+
+- _Location:_
+
+- _Possible values:_
+
+
+###### `results.encounterType.uuid`
+
+- _Location:_
+
+- _Possible values:_
+
+
+---
+
+## OpenMRS-SENAITE Flows
+
+###### `concept.complex.uuid`
+
+- _Location:_
+
+- _Possible values:_
+
+
+###### `openmrs.identifier.type.uuid`
+
+- _Location:_
+
+- _Possible values:_
+
+
+###### `results.encounterType.uuid`
+
+- _Location:_
+
+- _Possible values:_
+
\ No newline at end of file
diff --git a/docs/create-distro.md b/docs/create-distro.md
index c7731be..decf408 100644
--- a/docs/create-distro.md
+++ b/docs/create-distro.md
@@ -16,7 +16,7 @@ Ozone provides a series Apache Maven-based tools to facilitate the assembly of y
The Ozone Maven Archetype generates a foundational skeleton project, providing a customizable base for any specific implementation requirements.
-## **1** Configure Maven
+### 1) Configure Maven
Edit your Maven `settings.xml` file (usually located at `~/.m2/settings.xml`) and add the following block to it:
```xml
@@ -45,7 +45,7 @@ Edit your Maven `settings.xml` file (usually located at `~/.m2/settings.xml`) an
```
-## **2** Generate the archetype
+### 2) Generate the archetype
Use Maven's archetype tools to generate a new Ozone implementation project structure:
@@ -67,19 +67,19 @@ This will prompt you for several key variables for your Maven project:
This will create a bare-bones Ozone implementation project that should look like this:
```bash
ozone-gruzinia/
- ├── README.md
- ├── configs
- │ └── openmrs
- │ ├── frontend_config
- │ └── initializer_config
- ├── pom.xml
- ├── readme
- │ └── impl-guide.md
- └── scripts
- ├── mvnw
- ├── mvnw.cmd
- ├── mvnwDebug
- └── mvnwDebug.cmd
+├── README.md
+├── config
+│ └── openmrs
+│ ├── frontend_config
+│ └── initializer_config
+├── pom.xml
+├── readme
+│ └── impl-guide.md
+└── scripts
+ ├── mvnw
+ ├── mvnw.cmd
+ ├── mvnwDebug
+ └── mvnwDebug.cmd
```
## Available commands
@@ -88,6 +88,8 @@ ozone-gruzinia/
|:----|:----|:----|
|**Build** the distribution|
./scripts/mvnw clean package|Assembles and packages your distribution, incorporating any configurations and customizations you've applied.| |Access start/stop/destroy commands|
source target/go-to-scripts-dir.sh|Navigates to the directory containing the scripts for starting, stopping, and destroying the distribution, making these commands readily accessible.| -|**Start** the distribution|
./start-demo.sh|Initiates and launches all components of the Ozone HIS, bringing up the system.| +|**Start** the distribution|
./start-demo.sh|Initiates and launches all apps of the Ozone HIS, bringing up the system.| |**Stop** the distribution|
./stop-demo.sh|Gracefully halts all Ozone HIS services, effectively shutting down the system.| -|**Destroy** the distribution|
./destroy-demo.sh|Completely removes the distribution, clearing all its components and data, ideal for resetting the system or rectifying persistent issues ahead of a restart or a rebuild and restart.| \ No newline at end of file +|**Destroy** the distribution|
./destroy-demo.sh|Completely removes the distribution, clearing all its apps and data, ideal for resetting the system or rectifying persistent issues ahead of a restart or a rebuild and restart.| + +You are now ready to tailor Ozone to fit your specific requirements. Proceed to the following page for guidance on how to override default configurations. diff --git a/docs/devs/conventions.md b/docs/devs/conventions.md index 014cfed..e4ac5b3 100644 --- a/docs/devs/conventions.md +++ b/docs/devs/conventions.md @@ -1,6 +1,9 @@ # :construction: Conventions -In this section, we provide a comprehensive list of conventions followed in Ozone, organized by the type of conventions and thereby grouped by components. +!!! info "Coming soon:" + + * Listing our conventions, organized by the type and grouped by app/service. + * Code Conventions. ## Naming @@ -8,7 +11,7 @@ In this section, we provide a comprehensive list of conventions followed in Ozon - Should be named in the format `eip--`. Where `` and `` are the names of the two systems being integrated, in alphabetical order. For example, `eip-erpnext-openmrs`. - The name should be in lowercase and use hyphens to separate words. -- The preceding name should be used for(whenever possible): +- The preceding name should be used for (whenever possible): - GitHub repository name. - Docker Compose service. - Configuration directory. @@ -17,4 +20,4 @@ In this section, we provide a comprehensive list of conventions followed in Ozon ## Code Conventions -### Java +### Java \ No newline at end of file diff --git a/docs/devs/e2e-tests.md b/docs/devs/e2e-tests.md index 9c8f498..c37d378 100644 --- a/docs/devs/e2e-tests.md +++ b/docs/devs/e2e-tests.md @@ -1,13 +1,13 @@ # Automated End-to-End Tests -All data flows within Ozone and the actions performed on its HIS components are rigorously validated using a comprehensive suite of automated end-to-end (E2E) tests. +All data flows within Ozone and the actions performed on its HIS apps are rigorously validated using a comprehensive suite of automated end-to-end (E2E) tests. This section is designed to help Ozone developers familiarize themselves with [`ozone-e2e`](https://github.com/ozone-his/ozone-e2e), the repository where all end-to-end tests for Ozone are maintained. It will guide you through the architecture of a typical end-to-end test case and provide the necessary knowledge and practical steps to develop your own test cases. !!! info "Some facts about `ozone-e2e`" - We use [Playwright :fontawesome-solid-arrow-up-right-from-square:](https://playwright.dev/), the automation testing framework. - - We test our data flows through the actions and effects that they have on Ozone HIS components. + - We test our data flows through the actions and effects that they have on Ozone HIS apps. - We focus on how these actions and effects are experienced by end users. !!! tip "Software Prequisites" @@ -39,7 +39,7 @@ e2e as well as methods required by the tests to run. ``` -The data flows resulting from the integration between specific component pairs (e.g., between Odoo and OpenMRS) are typically tested through a designated test file for each pair (e.g., `odoo-openmrs-flows.spec.js`). All test files are located in the [`e2e/tests` directory](https://github.com/ozone-his/ozone-e2e/tree/main/e2e/tests). We encourage you to explore and review the current set of tests to understand the testing process better and evaluate the extent of their coverage. +The data flows resulting from the integration between specific app pairs (e.g., between Odoo and OpenMRS) are typically tested through a designated test file for each pair (e.g., `odoo-openmrs-flows.spec.js`). All test files are located in the [`e2e/tests` directory](https://github.com/ozone-his/ozone-e2e/tree/main/e2e/tests). We encourage you to explore and review the current set of tests to understand the testing process better and evaluate the extent of their coverage. ### Project configuration @@ -65,7 +65,7 @@ TEST_PRO=false All configuration variables are set to the desired values by editing and saving the [`.env` file :fontawesome-solid-arrow-up-right-from-square:](https://github.com/ozone-his/ozone-e2e/blob/main/.env) prior to running the tests. -Additionally, the `.env` file contains a range of configuration variables that specify the URLs for accessing the various HIS components in each test environment, as well as the credentials needed to execute the test cases. +Additionally, the `.env` file contains a range of configuration variables that specify the URLs for accessing the various HIS apps in each test environment, as well as the credentials needed to execute the test cases. ### Running tests against a local instance @@ -92,7 +92,7 @@ SENAITE_URL_QA= SENAITE_URL_DEMO= # ... ``` -Continue this pattern for all components running locally by identifying their local URL in your development environment, and edit the `.env` file accordingly. +Continue this pattern for all apps running locally by identifying their local URL in your development environment, and edit the `.env` file accordingly. ## Running Tests @@ -104,7 +104,7 @@ npx playwright test ``` ### Running specific tests -To focus on testing data flows between specific pairs of HIS components, you can run tests contained in a specific file. For example, to test the integration data flows between Odoo and OpenMRS: +To focus on testing data flows between specific pairs of HIS apps, you can run tests contained in a specific file. For example, to test the integration data flows between Odoo and OpenMRS: ``` npx playwright test odoo-openmrs-flows @@ -121,7 +121,7 @@ npx playwright test --project=chromium - **Passed**: When all tests within the suite pass without encountering any errors, the overall result is marked as "Passed". This means that the application behaved as expected under the test conditions. -- **Failed**: If any test within the suite encounters an error or assertion failure during execution, the overall result is marked as "Failed". Determine whether the failure is specific to the test case, a particular component or feature, or the entire application. Once you've identified the root cause of the failure, implement a fix to address the issue. This may involve modifying test assertions, updating application code, or addressing environmental dependencies. +- **Failed**: If any test within the suite encounters an error or assertion failure during execution, the overall result is marked as "Failed". Determine whether the failure is specific to the test case, a particular app or feature, or the entire application. Once you've identified the root cause of the failure, implement a fix to address the issue. This may involve modifying test assertions, updating application code, or addressing environmental dependencies. - **Skipped**: Sometimes, tests are intentionally skipped based on certain conditions or configurations. These skipped tests are not executed during the test run and are marked as "Skipped" in the test result. @@ -129,17 +129,17 @@ npx playwright test --project=chromium ### Naming test files -Our test cases cover the data flows between Ozone HIS components and we have taken the convention to group test cases by pairs of components. For example all data flows between OpenMRS and SENAITE are grouped together in a file named `openmrs-senaite-flows.spec.js` that lives in the `e2e/tests`. This file contains all test cases for data flows going from OpenMRS to SENAITE as well as those going from SENAITE to OpenMRS. +Our test cases cover the data flows between Ozone HIS apps and we have taken the convention to group test cases by pairs of apps. For example all data flows between OpenMRS and SENAITE are grouped together in a file named `openmrs-senaite-flows.spec.js` that lives in the `e2e/tests`. This file contains all test cases for data flows going from OpenMRS to SENAITE as well as those going from SENAITE to OpenMRS. -The naming is alphabetical per convention. The data flows going both ways between hypothetical HIS components _Foo_ and _Bar_ would live in a file named `bar-foo-flows.spec.js` and so on and so forth for all pairs of HIS components. +The naming is alphabetical per convention. The data flows going both ways between hypothetical HIS apps _Foo_ and _Bar_ would live in a file named `bar-foo-flows.spec.js` and so on and so forth for all pairs of HIS apps. ### Testing actions and effects -While Ozone relies on its components default behaviour and features, we do encompass in our E2E test suite the actions performed when using the user experience of the components and the effects observed throught the user experience of those components. This ensures that test are truly end-to-end with a focus on the end-user experience. +While Ozone relies on its apps default behaviour and features, we do encompass in our E2E test suite the actions performed when using the user experience of the apps and the effects observed throught the user experience of those apps. This ensures that test are truly end-to-end with a focus on the end-user experience. To write a test case: -- Identify the user interactions and functionalities to test between a pair of HIS components. +- Identify the user interactions and functionalities to test between a pair of HIS apps. - Use Playwright’s API to script the actions within each test scenario, such as navigating pages, clicking buttons, filling forms, and verifying UI elements. ### Utilizing Playwright @@ -212,6 +212,6 @@ We observe that the test structure is broken down between a **setup**, the actua - **Setup**: Omitted here. All aspects of the setup have been performed in the `beforeEach()` method. - **Replay**: Navigation to the lab order form, add a lab test, and save the form. -- **Verification**: Navigation to the SENAITE HIS component and search for the client by name. Verify that the client's name is visible in the clients list. +- **Verification**: Navigation to the SENAITE HIS app and search for the client by name. Verify that the client's name is visible in the clients list. **Cleanup**: The post-test cleanup consists of deleting the test patient and closing the browser page. diff --git a/docs/devs/eip-client-1.jpg b/docs/devs/eip-client-1.jpg index 13570b4..973d98a 100644 Binary files a/docs/devs/eip-client-1.jpg and b/docs/devs/eip-client-1.jpg differ diff --git a/docs/devs/index.md b/docs/devs/index.md index ef9c876..ca664c8 100644 --- a/docs/devs/index.md +++ b/docs/devs/index.md @@ -1,62 +1,62 @@ !!! info "" - This section of the Ozone Docs is designed for **software architects, engineers, and developers**. It provides comprehensive information on Ozone's architecture, guides on integrating new software components, and technical advice on developing within Ozone. + This section of the Ozone Docs is designed for **software architects, engineers, and developers**. It provides comprehensive information on Ozone's architecture, guides on integrating new software apps, and technical advice on developing within Ozone. # Architecture Overview ## Ozone Platform -Ozone Platform serves as the interoperability layer that seamlessly integrates HIS components by enabling data flows between them: +The Ozone Platform serves as the interoperability layer that seamlessly integrates HIS apps by enabling data flows of FHIR resources between them: Ozone Platform is a decenstralised mesh of peer-to-peer interoperability services, each an instance of Ozone's **EIP Client**. -Each service connects a pair of HIS components of Ozone's digital health sofware suite: +Each service connects a pair of HIS apps of Ozone's digital health sofware suite: ## Ozone's EIP Client -The core of the Ozone Platform is powered by the EIP Client(1), a Spring Boot application that runs Apache Camel routes. This application acts as the ETL[^etl] agent between two components of the HIS. +The core of the Ozone Platform is powered by the EIP[^eip] Client, a Spring Boot application that runs Apache Camel routes. This application acts as the ETL[^etl] agent between two apps of the HIS. { .annotate } -1. Enterprise Integration Patterns +[^eip]: Enterprise Integration Patterns [^etl]: Extract, Transform, Load -The EIP Client facilitates the **exchange of FHIR resources** between two components of Ozone's digital health software suite. This exchange of FHIR resources is precisely what makes the data flows of Ozone HIS. +The EIP Client facilitates the **exchange of FHIR resources** between two apps of Ozone's digital health software suite. This exchange of FHIR resources is precisely what makes the data flows of Ozone HIS. Development in Ozone primarily involves assembling peer-to-peer services using the EIP Client. This client is equipped with several built-in features, simplifying the development process: - It's a ready-to-use application designed for implementing Camel routes. - It manages authentication: - * With Ozone FOSS's HIS components. + * With Ozone FOSS's HIS apps. * With Ozone Pro's Identity Provider (IdP). {==:oz: Pro==} - It includes a variety of common libraries to implement data flows that can be reused across different services. ## Missing :fhir:FHIR APIs -Many software components do not provide a FHIR API, often because they are not healthcare-specific, such as ERP systems. When this occurs, there are two possible solutions: +Many software apps do not provide a FHIR API, often because they are not healthcare-specific, such as ERP systems. When this occurs, there are two possible solutions: ### **1** Lobby for the inclusion of a FHIR API The ideal solution is to advocate for the software editor or development community to include a FHIR API as part of the software itself. -Generally, this can be achieved gradually with minimal effort by focusing on the subset of FHIR resources most needed to accomplish the desired flows within Ozone HIS. Often, only a couple of resources are required, and not all operations need to be supported for those resources. +Generally, this can be achieved gradually with minimal effort by focusing on the subset of FHIR resources most needed to accomplish the desired flows within the Ozone HIS. Often, only a couple of resources are required, and not all operations need to be supported for those resources. ### **2** Development of a Camel FHIR facade diff --git a/docs/devs/oz-plat-1.jpg b/docs/devs/oz-plat-1.jpg index 249abdb..b1edeba 100644 Binary files a/docs/devs/oz-plat-1.jpg and b/docs/devs/oz-plat-1.jpg differ diff --git a/docs/devs/oz-plat-2.jpg b/docs/devs/oz-plat-2.jpg index c1f7fc8..b849c34 100644 Binary files a/docs/devs/oz-plat-2.jpg and b/docs/devs/oz-plat-2.jpg differ diff --git a/docs/eip-config-points.md b/docs/eip-config-points.md index b1e159e..cf96e7b 100644 --- a/docs/eip-config-points.md +++ b/docs/eip-config-points.md @@ -1,6 +1,6 @@ # :construction: EIP Configuration Points -In this section, we provide a comprehensive list of configuration points available in Ozone, organized by EIP services and thereby grouped by pairs of components. +In this section, we provide a comprehensive list of configuration points available in Ozone, organized by EIP services and thereby grouped by pairs of apps. --- diff --git a/docs/fonts/Geist-Regular.ttf b/docs/fonts/Geist-Regular.ttf new file mode 100644 index 0000000..a10d58a Binary files /dev/null and b/docs/fonts/Geist-Regular.ttf differ diff --git a/docs/fonts/Recoleta.woff2 b/docs/fonts/Recoleta.woff2 new file mode 100644 index 0000000..5799c98 Binary files /dev/null and b/docs/fonts/Recoleta.woff2 differ diff --git a/docs/index.md b/docs/index.md index 666b327..6920614 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,6 +1,6 @@ !!! info "" - This section of the Ozone Docs is designed for **digital health technical implementers**, focusing on how to install, configure, and run Ozone HIS. + This section of the Ozone Docs is designed for **digital health technical implementers**, focusing on how to install, configure, and run the Ozone HIS. # Quick Start @@ -28,9 +28,9 @@ :fontawesome-regular-hourglass-half: It may take some time to download and setup Ozone for the first time. - Then, start browsing Ozone. This requires you to log into each component separately: + Then, start browsing Ozone. This requires you to log into each app of the HIS separately: - | **HIS Component** | **URL** | + | **HIS App** | **URL** | |----------------------------------------|---------------------------------------------------------------------------------------------| | OpenMRS 3 | http://localhost/openmrs/spa | | SENAITE | http://localhost:8081/senaite | @@ -50,13 +50,13 @@ Gitpod will automatically launch a new tab for OpenMRS 3. - You can navigate to other Ozone HIS components via the PORTS tab of the Gitpod window: + You can navigate to other Ozone apps of the HIS via the PORTS tab of the Gitpod window: ![Ozone services started](assets/images/gitpod-list-services.png) -Each component will require you to log in separately with their own credentials: +Each app of the HIS will require you to log in separately with their own credentials: -| **HIS Component** | **Username** | **Password** | +| **App** | **Username** | **Password** | |----------------------------------------|----------------------------------------------|-----------------------------------------| | OpenMRS 3 | admin | Admin123 | | SENAITE | admin | password | diff --git a/docs/override-configs.md b/docs/override-configs.md new file mode 100644 index 0000000..2144b46 --- /dev/null +++ b/docs/override-configs.md @@ -0,0 +1,7 @@ +# :construction: Overriding Inherited Configurations + +!!! info "Coming soon:" + + * Using the Ozone Maven Archetype. + * Using the Maven parent. + * Overriding inherited configurations. Eg. OpenMRS frontend and backend configs, Odoo config, etc. \ No newline at end of file diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index abebbbe..d9e366a 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -1,17 +1,58 @@ -.oz-green { - color: #007d79; +@font-face { + font-family: "Recoleta"; + font-weight: normal; + font-style: normal; + src: url("../fonts/Recoleta.woff2"); } -.md-typeset .admonition { - font-size: 100%; +@font-face { + font-family: "Geist"; + font-weight: normal; + font-style: normal; + src: url("../fonts/Geist-Regular.ttf"); } -.md-typeset .admonition-title { - font-weight: 500; +:root { + --md-primary-fg-color: #3cb393; + --md-default-bg-color: #fcf4e5; + background: var(--md-default-bg-color) +} + +body { + --md-default-bg-color: #fcf4e5 !important; +} + +footer { + --md-footer-bg-color: #141324; +} + +code { + --md-code-bg-color: #fefaf4 !important; +} + +.md-ellipsis { + font-family: "Recoleta"; + font-size: 110%; +} + +.md-nav__item { + font-family: "Recoleta"; +} + +.md-header__button.md-logo img, .md-header__button.md-logo svg { + height: 1.5rem; +} + +.md-tabs__link { + font-size: 1.5em; +} + +.md-typeset .admonition { + font-size: 90%; } .md-typeset { - font-size: 140%; + font-size: 150%; } .md-typeset .small-title { @@ -19,12 +60,18 @@ font-weight: 500; } +.md-typeset h1 { + font-family: "Recoleta"; +} + .md-typeset h2 { + font-family: "Recoleta"; font-size: 155%; font-weight: 500; } .md-typeset h3 { + font-family: "Recoleta"; font-size: 120%; font-weight: 500; } @@ -44,12 +91,6 @@ font-size: 120%; } -:root { - --md-primary-fg-color: #007d79; - --md-primary-fg-color--light: #007d79; - --md-primary-fg-color--dark: #007d79; -} - .secondary { color:grey; } diff --git a/docs/users/analytics.md b/docs/users/analytics.md index bfe507e..2fb0f53 100644 --- a/docs/users/analytics.md +++ b/docs/users/analytics.md @@ -1,5 +1 @@ -!!! info inline end "" - - {==:oz: Pro==} - # :construction: Ozone Analytics \ No newline at end of file diff --git a/docs/users/index.md b/docs/users/index.md index 9a91d1f..dccc6d8 100644 --- a/docs/users/index.md +++ b/docs/users/index.md @@ -4,14 +4,14 @@ # Overview -Ozone is an easy-to-install {==growing suite of digital health software==}, +Ozone is an easy-to-install {==growing suite of digital health apps==},