Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integrate OpenElis with a FHIR-Based Open Client Registry #43

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 41 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,29 @@
# ci-hie-demo
# OpenELIS-OpenCR-HIE-Setup
This integration aims to connect OpenELIS, a laboratory information system, with a FHIR-Based Open Client Registry which will allow users to search for patients within their local OpenELIS system, If the patient isn't found locally, search the client registry then Import patient information from the client registry to OpenELIS.

In simpler terms, this lets users find patients within their local system and if not found, search for them in a central database and bring their information back into the local system.

## How-Tos

### Pre-Requesites
1. Git: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
2. Git Large File Storage: https://docs.github.com/en/repositories/working-with-files/managing-large-files/installing-git-large-file-storage
3. Docker: https://docs.docker.com/engine/install/
- Git: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
- Git Large File Storage: https://docs.github.com/en/repositories/working-with-files/managing-large-files/installing-git-large-file-storage
- Docker: https://docs.docker.com/engine/install/

### Startup

```sh
git clone https://github.com/I-TECH-UW/ci-hie-demo.git

git lfs fetch

git lfs checkout

git lfs pull

```
- ```
git clone https://github.com/mherman22/OpenELIS-OpenCR-HIE-Setup
```
- ```
git lfs fetch
```
- ```
git lfs checkout
```
- ```
git lfs pull
```
In the file found at "./configs/opencr/config.json" change the
installed flag under app to false to load configs for Opencr
```
Expand All @@ -31,26 +35,32 @@ installed flag under app to false to load configs for Opencr


### Resetting and Clearing OpenCR
```sh
docker stop opencr opencr-fhir es
docker system prune --volumes
```
- ```
docker stop opencr opencr-fhir es
```
- ```
docker system prune --volumes
```
## Local setup

Unzip esplugin plugin
- ```
cd esplugin/string-similarity
```
- ```
unzip string-similarity-scoring-0.0.6-es7.9.1.zip
```

Spin up the services
## Spin up the services

```
docker compose -f docker-compose-local.yml up -d
```
### You should be able to acces the Sigdep (OpenMRS) ,OpenHIM and Hapi-Fhir instances at the following urls
- ```
docker compose -f openelis-opencr-hie-docker-compose.yml up -d
```
### You should be able to acces the OpenELIS ,OpenHIM , OpenCR and Hapi-Fhir instances at the following urls
| Instance | URL | credentials (user : password)|
|---------- |:-------------:|------: |
| Sigdep (OpenMRS) | http://localhost:8080/openmrs | admin : Dppeis@pnls_16 |
| OpenHIM | http://localhost:9000 | [email protected] : openhim |
| OpenCR | http://localhost:3000/crux | [email protected] : intrahealth|
| OpenELIS | https://localhost:8443/OpenELIS-Global/ |  admin : adminADMIN!|
| OpenELIS | https://localhost/login |  admin : adminADMIN!|

### Restart the Streaming pipeline to work Properly
After spinning up the Sigdep3 , restart the Streaming pipeline to Stream all Changes to the SHR (Fixed by adding depends-on meta in compose file)
Expand Down Expand Up @@ -99,7 +109,9 @@ ansible-playbook -i inventory.ini deployment.yml

Run the following command in the test folder using newman to preload the client registry

```
npm install -g newman
newman run postman_collection.json -e postman_environment.json --iteration-data pims_rule_test_dataset.csv --insecure
- ```
npm install -g newman
```
- ```
newman run postman_collection.json -e postman_environment.json --iteration-data pims_rule_test_dataset.csv --insecure
```
215 changes: 215 additions & 0 deletions configs/hapi/properties/hapi_application.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
#Adds the option to go to eg. http://localhost:8080/actuator/health for seeing the running configuration
#see https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints
management:
endpoints:
web:
exposure:
include: "health,prometheus"
spring:
main:
allow-circular-references: true
#allow-bean-definition-overriding: true
flyway:
enabled: false
check-location: false
baselineOnMigrate: true
datasource:
url: 'jdbc:postgresql://database:5432/clinlims?currentSchema=clinlims'
#url: jdbc:h2:mem:test_mem
username: clinlims
password: clinlims

driverClassName: org.postgresql.Driver
max-active: 15

# database connection pool size
hikari:
maximum-pool-size: 10
jpa:
properties:
hibernate.format_sql: false
hibernate.show_sql: false

#Hibernate dialect is automatically detected except Postgres and H2.
#If using H2, then supply the value of ca.uhn.fhir.jpa.model.dialect.HapiFhirH2Dialect
#If using postgres, then supply the value of ca.uhn.fhir.jpa.model.dialect.HapiFhirPostgres94Dialect
hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect
hibernate.hbm2ddl.auto: update
# hibernate.jdbc.batch_size: 20
# hibernate.cache.use_query_cache: false
# hibernate.cache.use_second_level_cache: false
# hibernate.cache.use_structured_entries: false
# hibernate.cache.use_minimal_puts: false

### These settings will enable fulltext search with lucene or elastic
hibernate.search.enabled: true
### lucene parameters
# hibernate.search.backend.type: lucene
# hibernate.search.backend.analysis.configurer: ca.uhn.fhir.jpa.search.HapiHSearchAnalysisConfigurers$HapiLuceneAnalysisConfigurer
# hibernate.search.backend.directory.type: local-filesystem
# hibernate.search.backend.directory.root: target/lucenefiles
# hibernate.search.backend.lucene_version: lucene_current
### elastic parameters ===> see also elasticsearch section below <===
# hibernate.search.backend.type: elasticsearch
# hibernate.search.backend.analysis.configurer: ca.uhn.fhir.jpa.search.HapiHSearchAnalysisConfigurers$HapiElasticAnalysisConfigurer
hapi:
fhir:

### This enables the swagger-ui at /fhir/swagger-ui/index.html as well as the /fhir/api-docs (see https://hapifhir.io/hapi-fhir/docs/server_plain/openapi.html)
openapi_enabled: true
### This is the FHIR version. Choose between, DSTU2, DSTU3, R4 or R5
fhir_version: R4
### This flag when enabled to true, will avail evaluate measure operations from CR Module.
### Flag is false by default, can be passed as command line argument to override.
cr_enabled: "${CR_ENABLED: false}"
### enable to use the ApacheProxyAddressStrategy which uses X-Forwarded-* headers
### to determine the FHIR server address
# use_apache_address_strategy: false
### forces the use of the https:// protocol for the returned server address.
### alternatively, it may be set using the X-Forwarded-Proto header.
# use_apache_address_strategy_https: false
### enables the server to host content like HTML, css, etc. under the url pattern of /static/**
### the deepest folder level will be used. E.g. - if you put file:/foo/bar/bazz as value then the files are resolved under /static/bazz/**
#staticLocation: file:/foo/bar/bazz
### enable to set the Server URL
server_address: https://fhir.openelis.org:8443/fhir/
# defer_indexing_for_codesystems_of_size: 101
# install_transitive_ig_dependencies: true
### tells the server whether to attempt to load IG resources that are already present
# reload_existing_implementationGuides : false
# implementationguides:
### example from registry (packages.fhir.org)
# swiss:
# name: swiss.mednet.fhir
# version: 0.8.0
# example not from registry
# ips_1_0_0:
# url: https://build.fhir.org/ig/HL7/fhir-ips/package.tgz
# name: hl7.fhir.uv.ips
# version: 1.0.0
# supported_resource_types:
# - Patient
# - Observation
##################################################
# Allowed Bundle Types for persistence (defaults are: COLLECTION,DOCUMENT,MESSAGE)
##################################################
# allowed_bundle_types: COLLECTION,DOCUMENT,MESSAGE,TRANSACTION,TRANSACTIONRESPONSE,BATCH,BATCHRESPONSE,HISTORY,SEARCHSET
# allow_cascading_deletes: true
# allow_contains_searches: true
allow_external_references: true
# allow_multiple_delete: true
# allow_override_default_search_params: true
auto_create_placeholder_reference_targets: true
### tells the server to automatically append the current version of the target resource to references at these paths
# auto_version_reference_at_paths: Device.patient, Device.location, Device.parent, DeviceMetric.parent, DeviceMetric.source, Observation.device, Observation.subject
# cr_enabled: true
# ips_enabled: false
# default_encoding: JSON
default_pretty_print: false
default_page_size: 100
# delete_expunge_enabled: true
# enable_repository_validating_interceptor: true
# enable_index_missing_fields: false
# enable_index_of_type: true
# enable_index_contained_resource: false
### !!Extended Lucene/Elasticsearch Indexing is still a experimental feature, expect some features (e.g. _total=accurate) to not work as expected!!
### more information here: https://hapifhir.io/hapi-fhir/docs/server_jpa/elastic.html
advanced_lucene_indexing: false
bulk_export_enabled: false
bulk_import_enabled: false
# enforce_referential_integrity_on_delete: false
# This is an experimental feature, and does not fully support _total and other FHIR features.
# enforce_referential_integrity_on_delete: false
# enforce_referential_integrity_on_write: false
# etag_support_enabled: true
# expunge_enabled: true
# client_id_strategy: ALPHANUMERIC
fhirpath_interceptor_enabled: false
# filter_search_enabled: true
# graphql_enabled: true
narrative_enabled: false
# mdm_enabled: true
# local_base_urls:
# - https://hapi.fhir.org/baseR4
mdm_enabled: false
# partitioning:
# allow_references_across_partitions: false
# partitioning_include_in_search_hashes: false
cors:
allow_Credentials: true
# These are allowed_origin patterns, see: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/cors/CorsConfiguration.html#setAllowedOriginPatterns-java.util.List-
allowed_origin:
- '*'

# Search coordinator thread pool sizes
search-coord-core-pool-size: 20
search-coord-max-pool-size: 100
search-coord-queue-capacity: 200

# comma-separated package names, will be @ComponentScan'ed by Spring to allow for creating custom Spring beans
#custom-bean-packages:

# comma-separated list of fully qualified interceptor classes.
# classes listed here will be fetched from the Spring context when combined with 'custom-bean-packages',
# or will be instantiated via reflection using an no-arg contructor; then registered with the server
#custom-interceptor-classes:

# Threadpool size for BATCH'ed GETs in a bundle.
# bundle_batch_pool_size: 10
# bundle_batch_pool_max_size: 50

# logger:
# error_format: 'ERROR - ${requestVerb} ${requestUrl}'
# format: >-
# Path[${servletPath}] Source[${requestHeader.x-forwarded-for}]
# Operation[${operationType} ${operationName} ${idOrResourceName}]
# UA[${requestHeader.user-agent}] Params[${requestParameters}]
# ResponseEncoding[${responseEncodingNoDefault}]
# log_exceptions: true
# name: fhirtest.access
# max_binary_size: 104857600
max_page_size: 200
retain_cached_searches_mins: 60
reuse_cached_search_results_millis: 1
tester:
home:
name: OE adjacent FHIR Store
server_address: 'https://fhir.openelis.org:8443/fhir/'
refuse_to_fetch_third_party_urls: false
fhir_version: R4
# validation:
# requests_enabled: true
# responses_enabled: true
# binary_storage_enabled: true
inline_resource_storage_below_size: 4000
# bulk_export_enabled: true
subscription:
resthook_enabled: true
# websocket_enabled: false
# email:
# from: [email protected]
# host: google.com
# port:
# username:
# password:
# auth:
# startTlsEnable:
# startTlsRequired:
# quitWait:
# lastn_enabled: true
# store_resource_in_lucene_index_enabled: true
### This is configuration for normalized quantity search level default is 0
### 0: NORMALIZED_QUANTITY_SEARCH_NOT_SUPPORTED - default
### 1: NORMALIZED_QUANTITY_STORAGE_SUPPORTED
### 2: NORMALIZED_QUANTITY_SEARCH_SUPPORTED
# normalized_quantity_search_level: 2
#elasticsearch:
# debug:
# pretty_print_json_log: false
# refresh_after_write: false
# enabled: false
# password: SomePassword
# required_index_status: YELLOW
# rest_url: 'localhost:9200'
# protocol: 'http'
# schema_management_strategy: CREATE
Loading