diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index ff554cca076..bdc13ab4116 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -57,8 +57,6 @@ stages:
# Put to top, but kept in order here
# - name: hapi_fhir_jpaserver_base
# module: hapi-fhir-jpaserver-base
- - name: hapi_fhir_jpaserver_cql
- module: hapi-fhir-jpaserver-cql
- name: hapi_fhir_jpaserver_elastic_test_utilities
module: hapi-fhir-jpaserver-elastic-test-utilities
- name: hapi_fhir_jpaserver_mdm
@@ -106,6 +104,8 @@ stages:
module: hapi-fhir-storage-mdm
- name: hapi_fhir_storage_test_utilities
module: hapi-fhir-storage-test-utilities
+ - name: hapi_fhir_storage_cr
+ module: hapi-fhir-storage-cr
- name: hapi_fhir_structures_dstu2
module: hapi-fhir-structures-dstu2
- name: hapi_fhir_structures_dstu2_1
diff --git a/hapi-deployable-pom/pom.xml b/hapi-deployable-pom/pom.xml
index 62207eb2ff1..52c6744b1f6 100644
--- a/hapi-deployable-pom/pom.xml
+++ b/hapi-deployable-pom/pom.xml
@@ -4,7 +4,7 @@
ca.uhn.hapi.fhirhapi-fhir
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../pom.xml
diff --git a/hapi-fhir-android/pom.xml b/hapi-fhir-android/pom.xml
index dd1ba882337..bb5ac566d57 100644
--- a/hapi-fhir-android/pom.xml
+++ b/hapi-fhir-android/pom.xml
@@ -5,7 +5,7 @@
ca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../hapi-deployable-pom/pom.xml
diff --git a/hapi-fhir-base/pom.xml b/hapi-fhir-base/pom.xml
index bc0ce982add..6f7b6e4248e 100644
--- a/hapi-fhir-base/pom.xml
+++ b/hapi-fhir-base/pom.xml
@@ -5,7 +5,7 @@
ca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../hapi-deployable-pom/pom.xml
diff --git a/hapi-fhir-bom/pom.xml b/hapi-fhir-bom/pom.xml
index f574039b9b8..460f34eab7e 100644
--- a/hapi-fhir-bom/pom.xml
+++ b/hapi-fhir-bom/pom.xml
@@ -4,14 +4,14 @@
4.0.0ca.uhn.hapi.fhirhapi-fhir-bom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOTpomHAPI FHIR BOMca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../hapi-deployable-pom/pom.xml
@@ -152,6 +152,11 @@
hapi-fhir-storage-batch2-jobs${project.version}
+
+ ${project.groupId}
+ hapi-fhir-storage-cr
+ ${project.version}
+ ${project.groupId}hapi-fhir-storage-mdm
diff --git a/hapi-fhir-checkstyle/pom.xml b/hapi-fhir-checkstyle/pom.xml
index 8f4703c3c04..954a371fb94 100644
--- a/hapi-fhir-checkstyle/pom.xml
+++ b/hapi-fhir-checkstyle/pom.xml
@@ -5,7 +5,7 @@
ca.uhn.hapi.fhirhapi-fhir
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../pom.xml
diff --git a/hapi-fhir-cli/hapi-fhir-cli-api/pom.xml b/hapi-fhir-cli/hapi-fhir-cli-api/pom.xml
index 18a4a7b0e7b..33f14aace2a 100644
--- a/hapi-fhir-cli/hapi-fhir-cli-api/pom.xml
+++ b/hapi-fhir-cli/hapi-fhir-cli-api/pom.xml
@@ -4,7 +4,7 @@
ca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../../hapi-deployable-pom/pom.xml
diff --git a/hapi-fhir-cli/hapi-fhir-cli-app/pom.xml b/hapi-fhir-cli/hapi-fhir-cli-app/pom.xml
index 43074202af6..69a3ba5053a 100644
--- a/hapi-fhir-cli/hapi-fhir-cli-app/pom.xml
+++ b/hapi-fhir-cli/hapi-fhir-cli-app/pom.xml
@@ -6,7 +6,7 @@
ca.uhn.hapi.fhirhapi-fhir-cli
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../pom.xml
diff --git a/hapi-fhir-cli/hapi-fhir-cli-jpaserver/pom.xml b/hapi-fhir-cli/hapi-fhir-cli-jpaserver/pom.xml
index def0dbbbe26..db0e10e2231 100644
--- a/hapi-fhir-cli/hapi-fhir-cli-jpaserver/pom.xml
+++ b/hapi-fhir-cli/hapi-fhir-cli-jpaserver/pom.xml
@@ -6,7 +6,7 @@
ca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../../hapi-deployable-pom
diff --git a/hapi-fhir-cli/pom.xml b/hapi-fhir-cli/pom.xml
index 026594e03ee..ed6b4620b0c 100644
--- a/hapi-fhir-cli/pom.xml
+++ b/hapi-fhir-cli/pom.xml
@@ -5,7 +5,7 @@
ca.uhn.hapi.fhirhapi-fhir
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../pom.xml
diff --git a/hapi-fhir-client-okhttp/pom.xml b/hapi-fhir-client-okhttp/pom.xml
index ec90e566dbd..fd82fc33906 100644
--- a/hapi-fhir-client-okhttp/pom.xml
+++ b/hapi-fhir-client-okhttp/pom.xml
@@ -4,7 +4,7 @@
ca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../hapi-deployable-pom/pom.xml
diff --git a/hapi-fhir-client/pom.xml b/hapi-fhir-client/pom.xml
index d65129f696b..f6915626737 100644
--- a/hapi-fhir-client/pom.xml
+++ b/hapi-fhir-client/pom.xml
@@ -4,7 +4,7 @@
ca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../hapi-deployable-pom/pom.xml
diff --git a/hapi-fhir-converter/pom.xml b/hapi-fhir-converter/pom.xml
index a912b42f0e3..47e0fce5ca6 100644
--- a/hapi-fhir-converter/pom.xml
+++ b/hapi-fhir-converter/pom.xml
@@ -5,7 +5,7 @@
ca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../hapi-deployable-pom/pom.xml
diff --git a/hapi-fhir-dist/pom.xml b/hapi-fhir-dist/pom.xml
index e4c5d3e64f4..cf889124527 100644
--- a/hapi-fhir-dist/pom.xml
+++ b/hapi-fhir-dist/pom.xml
@@ -5,7 +5,7 @@
ca.uhn.hapi.fhirhapi-fhir
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../pom.xml
diff --git a/hapi-fhir-docs/pom.xml b/hapi-fhir-docs/pom.xml
index e7a64077965..ad7315822d2 100644
--- a/hapi-fhir-docs/pom.xml
+++ b/hapi-fhir-docs/pom.xml
@@ -5,7 +5,7 @@
ca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../hapi-deployable-pom/pom.xml
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4294-add-hapi-fhir-clinical-reasoning-module.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4294-add-hapi-fhir-clinical-reasoning-module.yaml
new file mode 100644
index 00000000000..31d8d0df068
--- /dev/null
+++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/6_4_0/4294-add-hapi-fhir-clinical-reasoning-module.yaml
@@ -0,0 +1,4 @@
+---
+type: add
+issue: 4294
+title: "The `hapi-fhir-jpaserver-cql` module has been replaced with a module called `hapi-fhir-storage-cr`. This was done to enable CQL evaluation and other clinical reasoning operations on non-JPA servers (like servers using MongoDb). Additionally, the new module supports some additional features for Measure evaluation, such as stratifiers and CQL language-level 1.5. The CQL engine and related components have also been upgraded to the latest versions."
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/files.properties b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/files.properties
index 03eb67817e6..5ff1884ce0d 100644
--- a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/files.properties
+++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/files.properties
@@ -75,10 +75,6 @@ page.server_jpa_mdm.mdm_details=MDM Technical Details
page.server_jpa_mdm.mdm_expansion=MDM Search Expansion
page.server_jpa_mdm.mdm_customizations=MDM Customizations
-section.server_jpa_cql.title=JPA Server: CQL
-page.server_jpa_cql.cql=CQL Getting Started
-page.server_jpa_cql.cql_measure=CQL Measure
-
section.server_jpa_partitioning.title=JPA Server: Partitioning and Multitenancy
page.server_jpa_partitioning.partitioning=Partitioning and Multitenancy
page.server_jpa_partitioning.partition_interceptor_examples=Partition Interceptor Examples
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/server_jpa_cql/cql.md b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/server_jpa_cql/cql.md
deleted file mode 100644
index e6429927237..00000000000
--- a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/server_jpa_cql/cql.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# CQL Getting Started
-
-## Introduction
-
-Clinical Quality Language (CQL) is a high-level, domain-specific language focused on clinical quality and targeted at measure and decision support artifact authors. HAPI embeds a [CQL engine](https://github.com/DBCG/cql_engine) allowing the evaluation of clinical knowledge artifacts that use CQL to describe their logic.
-
-A more detailed description of CQL is available at the [CQL Specification Implementation Guide](https://cql.hl7.org/)
-
-The FHIR [Clinical Reasoning module](http://www.hl7.org/fhir/clinicalreasoning-module.html) defines a set of resources, profiles, operations, etc. that can be used to work with clinical knowledge within FHIR. HAPI provides implementation for some of those operations, described in more detail below.
-
-## Working Example
-
-A complete working example of HAPI CQL can be found in the [JPA Server Starter](/hapi-fhir/docs/server_jpa/get_started.html) project. You may wish to browse its source to see how it is set up.
-
-## Overview
-
-To get up and running with HAPI CQL, you can enable it using the `hapi.properties` file in the JPA Server Starter by setting `hapi.fhir.enable_cql` key to `true`. If you are running your own server follow the instructions below to [enable it in HAPI FHIR directly](#cql-settings).
-
-Once you've enabled CQL processing, the next step is to load the appropriate knowledge artifact resources into your server.
-
-## CQL Settings
-
-There are two Spring beans available that add CQL processing to HAPI. You can enable CQL processing by importing the appropriate version for your server configuration.
-
-* `ca.uhn.fhir.cql.config.CqlDstu3Config`
-* `ca.uhn.fhir.cql.config.CqlR4Config`
-
-## Clinical Reasoning Operations
-
-HAPI provides implementations for some operations in DSTU3 and R4:
-
-[CQL Measure](cql_measure.html)
-
-## Roadmap
-
-Further development of the CQL capabilities in HAPI is planned:
-
-* Additional features and performance enhancements for Measure evaluation
-* Additional FHIR Clinical Reasoning Module operations:
- * Library $evaluate
- * PlanDefinition $apply
-* Support for the CPG IG Operations
- * $cql
diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/server_jpa_cql/cql_measure.md b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/server_jpa_cql/cql_measure.md
deleted file mode 100644
index 33b66e17bd5..00000000000
--- a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/docs/server_jpa_cql/cql_measure.md
+++ /dev/null
@@ -1,406 +0,0 @@
-# CQL Measure
-
-## Introduction
-
-The FHIR Clinical Reasoning Module defines the [Measure resource](https://www.hl7.org/fhir/measure.html) and several [associated operations](https://www.hl7.org/fhir/measure-operations.html). The Measure Resource represents a structured, computable definition of a health-related measure such as a clinical quality measure, public health indicator, or population analytics measure. These Measures can then be used for reporting, analytics, and data-exchange purposes.
-
-Electronic Clinical Quality Measures (eCQMs) in FHIR are represented as a FHIR Measure resource containing metadata and terminology, a population criteria section, and at least one FHIR Library resource containing a data criteria section as well as the logic used to define the population criteria. The population criteria section typically contains initial population criteria, denominator criteria, and numerator criteria sub-components, among others. This is elaborated upon in greater detail in the [CQF Measures IG](http://hl7.org/fhir/us/cqfmeasures). An example of an eCQM as defined in FHIR looks like:
-
-```json
-{
- "resourceType" : "Measure",
- "library" : [
- "http://hl7.org/fhir/us/cqfmeasures/Library/EXMLogic"
- ],
- "group" : [
- {
- "population" : [
- {
- "code" : {
- "coding" : [
- {
- "code" : "initial-population"
- }
- ]
- },
- "criteria" : {
- "language" : "text/cql.identifier",
- "expression" : "Initial Population"
- }
- },
- {
- "code" : {
- "coding" : [
- {
- "code" : "numerator"
- }
- ]
- },
- "criteria" : {
- "language" : "text/cql.identifier",
- "expression" : "Numerator"
- }
- },
- {
- "code" : {
- "coding" : [
- {
- "code" : "denominator"
- }
- ]
- },
- "criteria" : {
- "language" : "text/cql.identifier",
- "expression" : "Denominator"
- }
- }
- ]
- }
- ]
-}
-
-```
-
-Measures are then scored according the whether a subjects (or subjects) are members of the various populations.
-
-For example, a Measure for Breast Cancer screening might define an Initial Population (via CQL expressions) of "all women", a Denominator of "women over 35", and a Numerator of "women over 35 who have had breast cancer screenings in the past year". If the Measure is evaluated against a population of 100 women, 50 are over 35, and of those 25 have had breast cancer screenings in the past year, the final score would be 50%1 (total number in numerator / total number in the denominator).
-
-1. There are several methods for scoring Measures, this is meant only as an example.
-
-## Operations
-
-HAPI implements the [$evaluate-measure](https://www.hl7.org/fhir/operation-measure-evaluate-measure.html) operation. Support for additional operations is planned.
-
-## Evaluate Measure
-
-The `$evaluate-measure` operation is used to execute a Measure as specified by the relevant FHIR Resources against a subject or set of subjects. This implementation currently focuses primarily on supporting the narrower evaluation requirements defined by the [CQF Measures IG](http://hl7.org/fhir/us/cqfmeasures). Some support for extensions defined by other IGs is included as well, and the implementation aims to support a wider range of functionality in the future.
-
-### Example Measure
-
-Several example Measures are available in the [ecqm-content-r4](https://github.com/cqframework/ecqm-content-r4) IG. Full Bundles with all the required supporting resources are available [here](https://github.com/cqframework/ecqm-content-r4/tree/master/bundles/measure). You can download a Bundle and load it on your server as a transaction:
-
-```bash
-POST http://your-server-base/fhir BreastCancerScreeningFHIR-bundle.json
-```
-
-These Bundles also include example Patient clinical data so once posted Measure evaluation can be invoked with:
-
-```bash
-GET http://your-server-base/fhir/Measure/BreastCancerScreeningFHIR/$evaluate-measure?periodStart=2019-01-01&periodEnd=2019-12-31&subject=numerator&reportType=subject
-```
-
-### Measure Features
-
-The FHIR Measure specification defines several different types of Measures and various parameters for controlling the Measure evaluation. This section describes the features supported by HAPI.
-
-#### Reporting Period
-
-The `periodStart` and `periodEnd` parameters are used to control the Reporting Period for which a report is generated. This corresponds to `Measurement Period` defined in the CQL logic, as defined by the conformance requirements in the CQF Measures IG. Both `periodStart` and `periodEnd` must be used or neither must be used.
-
-If neither are used the default reporting period specified in the CQL logic is used, as shown here
-
-```cql
-parameter "Measurement Period" Interval
- default Interval[@2019-01-01T00:00:00.0, @2020-01-01T00:00:00.0)
-```
-
-If neither are used and there is no default reporting period in the CQL logic an error is thrown.
-
-A request using `periodStart` and `periodEnd` looks like:
-
-```bash
-GET fhir/Measure//$evaluate-measure?periodStart=2019-01-01&periodEnd=2019-12-31
-```
-
-`periodStart` and `periodEnd` support Dates (YYYY, YYYY-MM, or YYYY-MM-DD) and DateTimes (YYYY-MM-DDThh:mm:ss+zz:zz)
-
-#### Report Types
-
-Measure report types determine what data is returned from the evaluation. This is controlled with the `reportType` parameter on the $evaluate-measure Operation
-
-| Report Type | Supported | Description |
-| ------------ | :----------------: | -------------------------------------------------------------------------------------------------------------- |
-| subject | :white_check_mark: | Measure report for a single subject (e.g. one patient). Includes additional detail, such as evaluatedResources |
-| subject-list | :white_check_mark: | Measure report including the list of subjects in each population (e.g. all the patients in the "numerator") |
-| population | :white_check_mark: | Summary measure report for a population |
-
-NOTE: There's an open issue on the FHIR specification to align these names to the MeasureReportType value set.
-
-A request using `reportType` looks like:
-
-```bash
-GET fhir/Measure//$evaluate-measure?reportType=subject-list
-```
-
-#### Subject Types
-
-The subject of a measure evaluation is controlled with the `subject` (R4+) and `patient` (DSTU3) operation parameters. Currently the only subject type supported by HAPI is Patient. This means that all Measure evaluation and reporting happens with respect to a Patient or set of Patient resources.
-
-| Subject Type | Supported | Description |
-| ----------------- | :------------------: | ----------------- |
-| Patient | :white_check_mark: | A Patient |
-| Practitioner | :white_large_square: | A Practitioner |
-| Organization | :white_large_square: | An Organization |
-| Location | :white_large_square: | A Location |
-| Device | :white_large_square: | A Device |
-| Group1 | :white_large_square: | A set of subjects |
-
-1. See next section
-
-A request using `subject` looks like:
-
-```bash
-GET fhir/Measure//$evaluate-measure?subject=Patient/123
-```
-
-##### Selecting a set of Patients
-
-The set of Patients used for Measure evaluation is controlled with the `subject` (R4+) or `patient` (DSTU3), and `practitioner` parameters. The two parameters are mutually exclusive.
-
-| Parameter | Supported | Description |
-| ----------------------------------------------------- | :------------------: | ----------------------------------------------------------------------- |
-| Not specified | :white_check_mark: | All Patients on the server |
-| `subject=XXX` or `subject=Patient/XXX` | :white_check_mark: | A single Patient |
-| `practitioner=XXX` or `practitioner=Practitioner/XXX` | :white_check_mark: | All Patients whose `generalPractitioner` is the referenced Practitioner |
-| `subject=Group/XXX`1 | :white_large_square: | A Group containing subjects |
-| `subject=XXX` AND `practitioner=XXX` | :x: | Not a valid combination |
-
-1. Referencing a Group of Patients as the subject is defined in the ATR IG and is on the roadmap. This will allow much more control over which Patients are included in the evaluated set.
-
-A request using `practitioner` looks like:
-
-```bash
-GET fhir/Measure//$evaluate-measure?practitioner=Practitioner/XYZ
-```
-
-#### ReportType, Subject, Practitioner Matrix
-
-The following table shows the combinations of the `subject` (or `patient`), `practitioner` and `reportType` parameters that are valid
-
-| | subject reportType | subject-list reportType | population reportType |
-| ---------------- | :----------------: | :-------------------------------: | :-------------------------------: |
-| subject parameter | :white_check_mark: | :white_check_mark: 1,2 | :white_check_mark: 1,2 |
-| practitioner parameter | :x:3 | :white_check_mark: | :white_check_mark: |
-
-1. Including the subject parameter restricts the Measure evaluation to a single Patient. Omit the `subject` (or `patient`) parameter to get report for multiple Patients. The subject-list and population report types have less detail than a subject report.
-2. A Group `subject` with a subject-list or population `reportType` will be a valid combination once Group support is implemented.
-3. A practitioner have may zero, one, or many patients so a practitioner report always assumes a set.
-
-#### Scoring Methods
-
-The Measure scoring method determines how a Measure score is calculated. It is set with the [scoring](https://www.hl7.org/fhir/measure-definitions.html#Measure.scoring) element on the Measure resource.
-
-The HAPI implementation conforms to the requirements defined by the CQF Measures IG. A more detailed description of each scoring method is linked in the table below.
-
-| Scoring Method | Supported | Description |
-| ------------------- | :------------------: | ---------------------------------------------------------------------------------------------------------------------- |
-| proportion | :white_check_mark: | [Proportion Measures](https://build.fhir.org/ig/HL7/cqf-measures/measure-conformance.html#proportion-measures) |
-| ratio | :white_check_mark: | [Ratio Measures](https://build.fhir.org/ig/HL7/cqf-measures/measure-conformance.html#ratio-measures) |
-| continuous-variable | :white_check_mark: | [Continuous Variable](https://build.fhir.org/ig/HL7/cqf-measures/measure-conformance.html#continuous-variable-measure) |
-| cohort | :white_check_mark:* | [Cohort](https://build.fhir.org/ig/HL7/cqf-measures/measure-conformance.html#cohort-definitions) |
-| composite | :white_large_square: | See below |
-
-* The cohort Measure scoring support is partial. The HAPI implementation does not yet return the required Measure observations
-
-An example Measure resource with `scoring` defined looks like:
-
-```json
-{
- "resourceType": "Measure",
- "scoring": {
- "coding": [ {
- "system": "http://terminology.hl7.org/CodeSystem/measure-scoring",
- "code": "proportion",
- "display": "Proportion"
- } ]
- }
-}
-```
-
-##### Composite Scoring
-
-A composite Measure is scored by combining and/or aggregating the results of other Measures. The [compositeScoring](https://www.hl7.org/fhir/measure-definitions.html#Measure.compositeScoring) element is used to control how composite Measures are scored. HAPI does not currently support any composite scoring method.
-
-| Composite Scoring Method | Supported | Description |
-| ------------------------ | :------------------: | ---------------------------------------------------------------------------------------------- |
-| opportunity | :white_large_square: | Combines Numerators and Denominators for each component Measure |
-| all-or-nothing | :white_large_square: | Includes individuals that are in the numerator for all component Measures |
-| linear | :white_large_square: | Gives an individual score based on the number of numerators in which they appear |
-| weighted | :white_large_square: | Gives an individual a cored based on a weighted factor for each numerator in which they appear |
-
-#### Populations
-
-The HAPI implementation uses the populations defined by the CQF Measures IG for each scoring type. A matrix of the supported populations is shown in the [Criteria Names](https://build.fhir.org/ig/HL7/cqf-measures/measure-conformance.html#criteria-names) section of the CQF Measures IG.
-
-#### Population Criteria
-
-The logical criteria used for determining each Measure population is defined by the [Measure.group.population.criteria](https://hl7.org/fhir/R4/measure-definitions.html#Measure.group.population.criteria) element. The Measure specification allows population criteria to be defined using FHIR Path, CQL, or other languages as appropriate. The HAPI implementation currently only supports using CQL. The relationship between a Measure Population and CQL is illustrated in the [Population Criteria](https://build.fhir.org/ig/HL7/cqf-measures/measure-conformance.html#population-criteria) section of the CQF Measures IG.
-
-An example Measure resource with a population criteria referencing a CQL identifier looks like:
-
-```json
-{
- "resourceType": "Measure",
- "group": [ {
- "population": [ {
- "code": {
- "coding": [ {
- "system": "http://terminology.hl7.org/CodeSystem/measure-population",
- "code": "initial-population",
- "display": "Initial Population"
- } ]
- },
- "criteria": {
- "language": "text/cql.identifier",
- "expression": "Initial Population"
- }
- }]
- }]
-}
-```
-
-##### Criteria Expression Type
-
-| Expression Type | Supported |
-| --------------- | :------------------: |
-| CQL | :white_check_mark: |
-| FHIR Path | :white_large_square: |
-
-#### Supplemental Data Elements
-
-Supplemental Data Elements are used to report additional information about the subjects that may not be included in the in the Population criteria definitions. For example, it may be of interest to report the gender of all subjects for informational purposes. Supplemental data elements are defined by the [Measure.supplementalData](http://www.hl7.org/fhir/measure-definitions.html#Measure.supplementalData) element, and are reported as Observations in the evaluatedResources of the MeasureReport.
-
-Supplemental Data Elements can be specified as either CQL definitions or FHIR Path expressions.
-
-| Expression Type | Supported |
-| --------------- | :------------------: |
-| CQL | :white_check_mark: |
-| FHIR Path | :white_large_square: |
-
-An example Measure resource with some supplemental data elements set looks like:
-
-```json
-{
-"resourceType": "Measure",
- "supplementalData": [ {
- "code": {
- "text": "sde-ethnicity"
- },
- "criteria": {
- "language": "text/cql.identifier",
- "expression": "SDE Ethnicity"
- }
- }]
-}
-```
-
-#### Stratifiers
-
-Stratifiers are used divide Measure populations into segments of interest. For example, it may be of interest to compare the Measure score between different age groups or genders. Each stratum within a stratification is scored the same way as the overall population. Stratifiers are defined using the [Measure.group.stratifier](http://hl7.org/fhir/R4/measure-definitions.html#Measure.group.stratifier) element.
-
-HAPI does not implement stratifier support but it's on the roadmap.
-
-An example Measure resource with a stratifier set looks like:
-
-```json
-{
- "resourceType": "Measure",
- "group": [ {
- "stratifier": [ {
- "code": {
- "text": "Stratum 1"
- },
- "criteria": {
- "language": "text/cql.identifier",
- "expression": "Stratification 1"
- }
- }]
- }]
-}
-```
-
-##### Stratifier Expression Support
-
-As with Populations and Supplemental Data Elements the criteria used for Stratification may be defined with CQL or FHIR Path.
-
-| Expression Type | Supported |
-| --------------- | :------------------: |
-| CQL | :white_large_square: |
-| FHIR Path | :white_large_square: |
-
-##### Stratifier Component Support
-
-The Measure specification also supports multi-dimensional stratification, for cases where more than one data element is needed.
-
-| Stratifier Type | Supported |
-| ---------------- | :------------------: |
-| Single Component | :white_large_square: |
-| Multi Component | :white_large_square: |
-
-#### Evaluated Resources
-
-A FHIR MeasureReport permits referencing the Resources used when evaluating in the [MeasureReport.evaluatedResource](https://www.hl7.org/fhir/measurereport-definitions.html#MeasureReport.evaluatedResource) element. HAPI includes these resources when generating `subject` reports for a single Patient. Evaluated resources for `population` or `subject-list` reports are not included. For large populations this could quickly become an extremely large number of resources.
-
-The evaluated resources will not include every resource on the HAPI server for a given subject. Rather, it includes only the resources that were retrieved from the server by the CQL logic that was evaluated. This corresponds to the data-requirements for a given Measure. As an example, consider the following CQL:
-
-```cql
-valueset "Example Value Set" : 'http://fhir.org/example-value-set'
-
-define "Example Observations":
- [Observation : "Example Value Set"]
-```
-
-That CQL will only select Observation Resources that have a code in the "Example Value Set". Those Observations will be reported in the Evaluated Resources while any others will not.
-
-#### Last Received On
-
-The `lastReceivedOn` parameter is the date the Measure was evaluated and reported. It is used to limit the number of resources reported in the Measure report for individual reports. It is currently not supported by HAPI.
-
-#### Extensions
-
-A number of extensions to Measure evaluation defined by various IGs are supported. They are described briefly in the table below.
-
-| Extension | Description |
-| --------- | ----------- |
-| http://hl7.org/fhir/us/cqframework/cqfmeasures/StructureDefinition/cqfm-productLine | Used to evaluate different product lines (e.g. Medicare, Private, etc.) |
-| http://hl7.org/fhir/StructureDefinition/cqf-measureInfo | Used to demark a Measure Observation |
-| http://hl7.org/fhir/us/davinci-deqm/StructureDefinition/extension-populationReference | Used to specify the population that triggered a particular `evaluatedResource`|
-
-There's not currently a way to configure which extensions are enabled. All supported extensions are always enabled.
-
-## Architecture
-
-Below are a few diagrams that show the overall architecture of Measure evaluation and how it fits into the HAPI FHIR Server.
-
-### Component Diagram
-
-This is a simplified component diagram of the Measure evaluation architecture
-
-![Measure Evaluation Architecture](/hapi-fhir/docs/images/ref_measure_architecture_drawio.svg)
-
-### Sequence Chart
-
-This sequence chart approximates the Measure evaluation logic implemented by HAPI.
-
-![Measure Evaluation Sequence Chart](/hapi-fhir/docs/images/measure_evaluation_sequence.png)
-
-## FAQs
-
-Q: I get an error saying HAPI can't locate my library, and I've verified it's on the server.
-
-A: HAPI follows the [Library conformance requirements](https://build.fhir.org/ig/HL7/cqf-measures/measure-conformance.html#conformance-requirement-3-1) defined by the CQF Measures IG, meaning the Library must have a `logic-library` type, the name and versions of the FHIR Library and CQL Library must match, and the url of the Library must end in the name of the Library.
-
-FHIR Libraries generated from CQL via the IG Publisher follow these requirements automatically.
-
-Q: Does HAPI support partitions for evaluation?
-
-A: Yes, though the Measure and associated Resources must be in the same partition as the clinical data being used.
-
-## Roadmap
-
-* Complete cohort implementation
-* Support for stratifiers
-* Support for Group subjects
-* Support for FHIRPath expressions in Stratifiers, Supplemental Data Elements, and Population Criteria
-* `$data-requirements`, `$collect-data`, `$submit-data`, and `$care-gaps` operations
-* Support for more extensions defined in the CQF Measures, CPG, and ATR IGs
diff --git a/hapi-fhir-jacoco/pom.xml b/hapi-fhir-jacoco/pom.xml
index d45e9c315bf..773ec839d2a 100644
--- a/hapi-fhir-jacoco/pom.xml
+++ b/hapi-fhir-jacoco/pom.xml
@@ -11,7 +11,7 @@
ca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../hapi-deployable-pom/pom.xml
diff --git a/hapi-fhir-jaxrsserver-base/pom.xml b/hapi-fhir-jaxrsserver-base/pom.xml
index cd4b05bcdaf..8a2e53ba1d7 100644
--- a/hapi-fhir-jaxrsserver-base/pom.xml
+++ b/hapi-fhir-jaxrsserver-base/pom.xml
@@ -4,7 +4,7 @@
ca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../hapi-deployable-pom/pom.xml
diff --git a/hapi-fhir-jpa/pom.xml b/hapi-fhir-jpa/pom.xml
index 200aca20dc2..b852374facf 100644
--- a/hapi-fhir-jpa/pom.xml
+++ b/hapi-fhir-jpa/pom.xml
@@ -5,7 +5,7 @@
ca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../hapi-deployable-pom/pom.xml4.0.0
diff --git a/hapi-fhir-jpaserver-base/pom.xml b/hapi-fhir-jpaserver-base/pom.xml
index 019ab3ac0e3..7bb045ffb1f 100644
--- a/hapi-fhir-jpaserver-base/pom.xml
+++ b/hapi-fhir-jpaserver-base/pom.xml
@@ -5,7 +5,7 @@
ca.uhn.hapi.fhirhapi-deployable-pom
- 6.3.6-SNAPSHOT
+ 6.3.7-SNAPSHOT../hapi-deployable-pom/pom.xml
diff --git a/hapi-fhir-jpaserver-cql/.gitignore b/hapi-fhir-jpaserver-cql/.gitignore
deleted file mode 100644
index c03394cb2ee..00000000000
--- a/hapi-fhir-jpaserver-cql/.gitignore
+++ /dev/null
@@ -1,130 +0,0 @@
-ca.*/
-target/
-/bin
-nohup.out
-LogMessages.html
-
-# Created by https://www.gitignore.io
-
-### Java ###
-*.class
-
-# Mobile Tools for Java (J2ME)
-.mtj.tmp/
-
-# Package Files #
-*.jar
-*.war
-*.ear
-
-# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
-
-
-### Maven ###
-target/
-pom.xml.tag
-pom.xml.releaseBackup
-pom.xml.versionsBackup
-pom.xml.next
-release.properties
-dependency-reduced-pom.xml
-buildNumber.properties
-
-
-### Vim ###
-[._]*.s[a-w][a-z]
-[._]s[a-w][a-z]
-*.un~
-Session.vim
-.netrwhist
-*~
-
-
-### Intellij ###
-# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm
-
-*.iml
-
-## Directory-based project format:
-.idea/
-# if you remove the above rule, at least ignore the following:
-
-# User-specific stuff:
-# .idea/workspace.xml
-# .idea/tasks.xml
-# .idea/dictionaries
-
-# Sensitive or high-churn files:
-# .idea/dataSources.ids
-# .idea/dataSources.xml
-# .idea/sqlDataSources.xml
-# .idea/dynamic.xml
-# .idea/uiDesigner.xml
-
-# Gradle:
-# .idea/gradle.xml
-# .idea/libraries
-
-# Mongo Explorer plugin:
-# .idea/mongoSettings.xml
-
-## File-based project format:
-*.ipr
-*.iws
-
-## Plugin-specific files:
-
-# IntelliJ
-/out/
-
-# mpeltonen/sbt-idea plugin
-.idea_modules/
-
-# JIRA plugin
-atlassian-ide-plugin.xml
-
-# Crashlytics plugin (for Android Studio and IntelliJ)
-com_crashlytics_export_strings.xml
-crashlytics.properties
-crashlytics-build.properties
-
-
-
-### Eclipse ###
-*.pydevproject
-.metadata
-.gradle
-bin/
-tmp/
-*.tmp
-*.bak
-*.swp
-*~.nib
-local.properties
-.loadpath
-
-# Eclipse Core
-.project
-
-# External tool builders
-.externalToolBuilders/
-
-# Locally stored "Eclipse launch configurations"
-*.launch
-
-# CDT-specific
-.cproject
-
-# JDT-specific (Eclipse Java Development Tools)
-
-# PDT-specific
-.buildpath
-
-# sbteclipse plugin
-.target
-
-# TeXlipse plugin
-.texlipse
-
-/target/
diff --git a/hapi-fhir-jpaserver-cql/pom.xml b/hapi-fhir-jpaserver-cql/pom.xml
deleted file mode 100644
index ece967972d1..00000000000
--- a/hapi-fhir-jpaserver-cql/pom.xml
+++ /dev/null
@@ -1,218 +0,0 @@
-
-
- 4.0.0
-
-
- ca.uhn.hapi.fhir
- hapi-deployable-pom
- 6.3.6-SNAPSHOT
- ../hapi-deployable-pom/pom.xml
-
-
- hapi-fhir-jpaserver-cql
- jar
-
- HAPI FHIR JPA Server - Clinical Quality Language
-
-
-
- ca.uhn.hapi.fhir
- org.hl7.fhir.dstu3
- ${fhir_core_version}
- compile
-
-
- org.opencds.cqf.cql
- evaluator.engine
- ${cql-evaluator.version}
-
-
-
- com.sun.mail
- javax.mail
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-client
-
-
-
-
- org.opencds.cqf.cql
- engine
- ${cql-engine.version}
-
-
- org.slf4j
- slf4j-log4j12
-
-
- jakarta.xml.bind
- jakarta.xml.bind-api
-
-
-
-
- org.opencds.cqf.cql
- engine.fhir
- ${cql-engine.version}
-
-
- org.slf4j
- slf4j-log4j12
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-client
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-structures-dstu2
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-structures-hl7org-dstu2
-
-
-
-
- info.cqframework
- cql-to-elm
- ${cqframework.version}
-
-
- jakarta.xml.bind
- jaxb-api
-
-
- jakarta.xml.bind
- jakarta.xml.bind-api
-
-
-
-
- info.cqframework
- quick
- ${cqframework.version}
-
-
- jakarta.xml.bind
- jaxb-api
-
-
- jakarta.xml.bind
- jakarta.xml.bind-api
-
-
-
-
- javax.xml.bind
- jaxb-api
- ${jaxb_api_version}
-
-
- javax.activation
- javax.activation-api
-
-
-
-
- com.jamesmurty.utils
- java-xmlbuilder
- 1.3
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-base
- ${project.version}
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-server
- ${project.version}
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-structures-dstu3
- ${project.version}
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-structures-r4
- ${project.version}
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-structures-r5
- ${project.version}
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-jpaserver-base
- ${project.version}
-
-
- com.sun.activation
- javax.activation
-
-
-
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-caching-testing
- ${project.version}
- test
-
-
- org.testcontainers
- junit-jupiter
- test
-
-
- org.mockito
- mockito-core
- test
-
-
- org.springframework
- spring-test
- test
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-test-utilities
- ${project.version}
- test
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-storage-test-utilities
- ${project.version}
- test
-
-
- ca.uhn.hapi.fhir
- hapi-fhir-jpaserver-test-utilities
- ${project.version}
- test
-
-
-
-
-
-
- org.basepom.maven
- duplicate-finder-maven-plugin
-
- false
- false
- false
-
-
-
-
-
-
diff --git a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/evaluation/LibraryLoader.java b/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/evaluation/LibraryLoader.java
deleted file mode 100644
index 9a1354b05f8..00000000000
--- a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/evaluation/LibraryLoader.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package ca.uhn.fhir.cql.common.evaluation;
-
-/*-
- * #%L
- * HAPI FHIR JPA Server - Clinical Quality Language
- * %%
- * Copyright (C) 2014 - 2023 Smile CDR, Inc.
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import ca.uhn.fhir.i18n.Msg;
-import org.apache.commons.lang3.Validate;
-import org.cqframework.cql.cql2elm.CqlTranslator;
-import org.cqframework.cql.cql2elm.CqlTranslatorException;
-import org.cqframework.cql.cql2elm.CqlTranslatorOptions;
-import org.cqframework.cql.cql2elm.LibraryManager;
-import org.cqframework.cql.cql2elm.ModelManager;
-import org.cqframework.cql.elm.execution.Library;
-import org.cqframework.cql.elm.execution.VersionedIdentifier;
-
-import javax.xml.bind.JAXBException;
-import java.io.ByteArrayInputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import static ca.uhn.fhir.cql.common.helper.TranslatorHelper.errorsToString;
-import static ca.uhn.fhir.cql.common.helper.TranslatorHelper.getTranslator;
-import static ca.uhn.fhir.cql.common.helper.TranslatorHelper.readLibrary;
-
-public class LibraryLoader implements org.opencds.cqf.cql.engine.execution.LibraryLoader {
- private LibraryManager libraryManager;
- private ModelManager modelManager;
- private Map libraries = new HashMap<>();
-
- // private static final Logger logger =
- // LoggerFactory.getLogger(LibraryLoader.class);
-
- public Collection getLibraries() {
- return this.libraries.values();
- }
-
- public LibraryManager getLibraryManager() {
- return this.libraryManager;
- }
-
- public ModelManager getModelManager() {
- return this.modelManager;
- }
-
- public LibraryLoader(LibraryManager libraryManager, ModelManager modelManager) {
- this.libraryManager = libraryManager;
- this.modelManager = modelManager;
- }
-
- private Library resolveLibrary(VersionedIdentifier libraryIdentifier) {
- Validate.notNull(libraryIdentifier, "Library identifier is null.");
-
- Validate.notNull(libraryIdentifier.getId(), "Library identifier id is null.");
-
- String mangledId = this.mangleIdentifer(libraryIdentifier);
-
- Library library = libraries.get(mangledId);
- if (library == null) {
- library = loadLibrary(libraryIdentifier);
- libraries.put(mangledId, library);
- }
-
- return library;
- }
-
- private String mangleIdentifer(VersionedIdentifier libraryIdentifier) {
- String id = libraryIdentifier.getId();
- String version = libraryIdentifier.getVersion();
-
- return version == null ? id : id + "-" + version;
- }
-
- private Library loadLibrary(VersionedIdentifier libraryIdentifier) {
- org.hl7.elm.r1.VersionedIdentifier identifier = new org.hl7.elm.r1.VersionedIdentifier()
- .withId(libraryIdentifier.getId()).withSystem(libraryIdentifier.getSystem())
- .withVersion(libraryIdentifier.getVersion());
-
- ArrayList errors = new ArrayList<>();
- org.hl7.elm.r1.Library translatedLibrary = libraryManager.resolveLibrary(identifier, CqlTranslatorOptions.defaultOptions(), errors).getLibrary();
-
- if (CqlTranslatorException.HasErrors(errors)) {
- throw new IllegalArgumentException(Msg.code(1657) + errorsToString(errors));
- }
- try {
- CqlTranslator translator = getTranslator("", libraryManager, modelManager);
-
- if (translator.getErrors().size() > 0) {
- throw new IllegalArgumentException(Msg.code(1658) + errorsToString(translator.getErrors()));
- }
-
- return readLibrary(new ByteArrayInputStream(
- translator.convertToXml(translatedLibrary).getBytes(StandardCharsets.UTF_8)));
- } catch (JAXBException e) {
- throw new IllegalArgumentException(Msg.code(1659) + String.format("Errors occurred translating library %s%s.",
- identifier.getId(), identifier.getVersion() != null ? ("-" + identifier.getVersion()) : ""));
- }
- }
-
- @Override
- public Library load(VersionedIdentifier versionedIdentifier) {
- return resolveLibrary(versionedIdentifier);
- }
-}
diff --git a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/evaluation/MeasurePopulationType.java b/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/evaluation/MeasurePopulationType.java
deleted file mode 100644
index 98bc3265abb..00000000000
--- a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/evaluation/MeasurePopulationType.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package ca.uhn.fhir.cql.common.evaluation;
-
-/*-
- * #%L
- * HAPI FHIR JPA Server - Clinical Quality Language
- * %%
- * Copyright (C) 2014 - 2023 Smile CDR, Inc.
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import ca.uhn.fhir.i18n.Msg;
-import java.util.HashMap;
-import java.util.Map;
-
-public enum MeasurePopulationType {
- INITIALPOPULATION("initial-population", "Initial Population",
- "The initial population refers to all patients or events to be evaluated by a quality measure involving patients who share a common set of specified characterstics. All patients or events counted (for example, as numerator, as denominator) are drawn from the initial population"),
-
- NUMERATOR("numerator", "Numerator",
- "\tThe upper portion of a fraction used to calculate a rate, proportion, or ratio. Also called the measure focus, it is the target process, condition, event, or outcome. Numerator criteria are the processes or outcomes expected for each patient, or event defined in the denominator. A numerator statement describes the clinical action that satisfies the conditions of the measure"),
-
- NUMERATOREXCLUSION("numerator-exclusion", "Numerator Exclusion",
- "Numerator exclusion criteria define patients or events to be removed from the numerator. Numerator exclusions are used in proportion and ratio measures to help narrow the numerator (for inverted measures)"),
-
- DENOMINATOR("denominator", "Denominator",
- "The lower portion of a fraction used to calculate a rate, proportion, or ratio. The denominator can be the same as the initial population, or a subset of the initial population to further constrain the population for the purpose of the measure"),
-
- DENOMINATOREXCLUSION("denominator-exclusion", "Denominator Exclusion",
- "Denominator exclusion criteria define patients or events that should be removed from the denominator before determining if numerator criteria are met. Denominator exclusions are used in proportion and ratio measures to help narrow the denominator. For example, patients with bilateral lower extremity amputations would be listed as a denominator exclusion for a measure requiring foot exams"),
-
- DENOMINATOREXCEPTION("denominator-exception", "Denominator Exception",
- "Denominator exceptions are conditions that should remove a patient or event from the denominator of a measure only if the numerator criteria are not met. Denominator exception allows for adjustment of the calculated score for those providers with higher risk populations. Denominator exception criteria are only used in proportion measures"),
-
- MEASUREPOPULATION("measure-population", "Measure Population",
- "Measure population criteria define the patients or events for which the individual observation for the measure should be taken. Measure populations are used for continuous variable measures rather than numerator and denominator criteria"),
-
- MEASUREPOPULATIONEXCLUSION("measure-population-exclusion", "Measure Population Exclusion",
- "Measure population criteria define the patients or events that should be removed from the measure population before determining the outcome of one or more continuous variables defined for the measure observation. Measure population exclusion criteria are used within continuous variable measures to help narrow the measure population"),
-
- MEASUREOBSERVATION("measure-observation", "Measure Observation",
- "Defines the individual observation to be performed for each patient or event in the measure population. Measure observations for each case in the population are aggregated to determine the overall measure score for the population");
-
- private String code;
- private String display;
- private String definition;
-
- MeasurePopulationType(String code, String display, String definition) {
- this.code = code;
- this.display = display;
- this.definition = definition;
- }
-
- private static final Map lookup = new HashMap<>();
-
- static {
- for (MeasurePopulationType mpt : MeasurePopulationType.values()) {
- lookup.put(mpt.toCode(), mpt);
- }
- }
-
- // This method can be used for reverse lookup purpose
- public static MeasurePopulationType fromCode(String code) {
- if (code != null && !code.isEmpty()) {
- if (lookup.containsKey(code)) {
- return lookup.get(code);
- }
- // } else if (Configuration.isAcceptInvalidEnums()) {
- // return null;
- // } else {
- // // throw new FHIRException(Msg.code(1655) + "Unknown MeasureScoring code \'" + code + "\'");
- // }
- }
-
- return null;
- }
-
- public String getSystem() {
- return "http://hl7.org/fhir/measure-population";
- }
-
- public String toCode() {
- return this.code;
- }
-
- public String getDisplay() {
- return this.display;
- }
-
- public String getDefinition() {
- return this.definition;
- }
-}
diff --git a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/evaluation/MeasureScoring.java b/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/evaluation/MeasureScoring.java
deleted file mode 100644
index 64457e83763..00000000000
--- a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/evaluation/MeasureScoring.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package ca.uhn.fhir.cql.common.evaluation;
-
-/*-
- * #%L
- * HAPI FHIR JPA Server - Clinical Quality Language
- * %%
- * Copyright (C) 2014 - 2023 Smile CDR, Inc.
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import ca.uhn.fhir.i18n.Msg;
-import java.util.HashMap;
-import java.util.Map;
-
-public enum MeasureScoring {
- PROPORTION("proportion", "Proportion", "The measure score is defined using a proportion"),
-
- RATIO("ratio", "Ratio", "The measure score is defined using a ratio"),
-
- CONTINUOUSVARIABLE("continuous-variable", "Continuous Variable", "The score is defined by a calculation of some quantity"),
-
- COHORT("cohort", "Cohort", "The measure is a cohort definition");
-
- private String code;
- private String display;
- private String definition;
-
- MeasureScoring(String code, String display, String definition) {
- this.code = code;
- this.display = display;
- this.definition = definition;
- }
-
- private static final Map lookup = new HashMap<>();
-
- static {
- for (MeasureScoring ms : MeasureScoring.values()) {
- lookup.put(ms.toCode(), ms);
- }
- }
-
- public static MeasureScoring fromCode(String code) {
- if (code != null && !code.isEmpty()) {
- if (lookup.containsKey(code)) {
- return lookup.get(code);
- }
- // } else if (Configuration.isAcceptInvalidEnums()) {
- // return null;
- // } else {
- // // throw new FHIRException(Msg.code(1656) + "Unknown MeasureScoring code \'" + code + "\'");
- // }
- }
-
- return null;
- }
-
- public String toCode() {
- return this.code;
- }
-
- public String getSystem() {
- return "http://hl7.org/fhir/measure-scoring";
- }
-
- public String getDefinition() {
- return this.definition;
-
- }
-
- public String getDisplay() {
- return this.display;
- }
-}
diff --git a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/helper/DateHelper.java b/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/helper/DateHelper.java
deleted file mode 100644
index cd7f9c1aad2..00000000000
--- a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/helper/DateHelper.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package ca.uhn.fhir.cql.common.helper;
-
-/*-
- * #%L
- * HAPI FHIR JPA Server - Clinical Quality Language
- * %%
- * Copyright (C) 2014 - 2023 Smile CDR, Inc.
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import ca.uhn.fhir.i18n.Msg;
-import org.apache.commons.lang3.StringUtils;
-import org.hl7.fhir.r4.model.DateTimeType;
-
-import java.util.Date;
-
-/**
- * Helper class to resolve period dates used by {@link ca.uhn.fhir.cql.dstu3.evaluation.MeasureEvaluationSeed}
- * and {@link ca.uhn.fhir.cql.r4.evaluation.MeasureEvaluationSeed}.
- */
-public class DateHelper {
-
- /**
- * @param date A date String in the format YYYY-MM-DD.
- * @return A {@link java.util.Date} object representing the String data that was passed in.
- */
- public static Date resolveRequestDate(String paramName, String date) {
- if (StringUtils.isBlank(date)) {
- throw new IllegalArgumentException(Msg.code(1662) + paramName + " parameter cannot be blank!");
- }
- return new DateTimeType(date).getValue();
- }
-}
diff --git a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/helper/TranslatorHelper.java b/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/helper/TranslatorHelper.java
deleted file mode 100644
index 18fd2298da0..00000000000
--- a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/helper/TranslatorHelper.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package ca.uhn.fhir.cql.common.helper;
-
-/*-
- * #%L
- * HAPI FHIR JPA Server - Clinical Quality Language
- * %%
- * Copyright (C) 2014 - 2023 Smile CDR, Inc.
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import ca.uhn.fhir.i18n.Msg;
-import org.cqframework.cql.cql2elm.CqlTranslator;
-import org.cqframework.cql.cql2elm.CqlTranslatorException;
-import org.cqframework.cql.cql2elm.LibraryManager;
-import org.cqframework.cql.cql2elm.ModelManager;
-import org.cqframework.cql.elm.execution.Library;
-import org.cqframework.cql.elm.tracking.TrackBack;
-import org.opencds.cqf.cql.engine.execution.CqlLibraryReader;
-
-import javax.xml.bind.JAXBException;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-
-public class TranslatorHelper {
- public static Library readLibrary(InputStream xmlStream) {
- try {
- return CqlLibraryReader.read(xmlStream);
- } catch (IOException | JAXBException e) {
- throw new IllegalArgumentException(Msg.code(1660) + "Error encountered while reading ELM xml: " + e.getMessage());
- }
- }
-
- public static String errorsToString(Iterable exceptions) {
- ArrayList errors = new ArrayList<>();
- for (CqlTranslatorException error : exceptions) {
- TrackBack tb = error.getLocator();
- String lines = tb == null ? "[n/a]"
- : String.format("%s [%d:%d, %d:%d] ",
- (tb.getLibrary() != null ? tb.getLibrary().getId()
- + (tb.getLibrary().getVersion() != null ? ("-" + tb.getLibrary().getVersion()) : "")
- : ""),
- tb.getStartLine(), tb.getStartChar(), tb.getEndLine(), tb.getEndChar());
- errors.add(lines + error.getMessage());
- }
-
- return String.join("\n", errors);
- }
-
- public static CqlTranslator getTranslator(String cql, LibraryManager libraryManager, ModelManager modelManager) {
- return getTranslator(new ByteArrayInputStream(cql.getBytes(StandardCharsets.UTF_8)), libraryManager,
- modelManager);
- }
-
- public static CqlTranslator getTranslator(InputStream cqlStream, LibraryManager libraryManager,
- ModelManager modelManager) {
- ArrayList options = new ArrayList<>();
- options.add(CqlTranslator.Options.EnableAnnotations);
- options.add(CqlTranslator.Options.EnableLocators);
- options.add(CqlTranslator.Options.DisableListDemotion);
- options.add(CqlTranslator.Options.DisableListPromotion);
- options.add(CqlTranslator.Options.DisableMethodInvocation);
- CqlTranslator translator;
- try {
- translator = CqlTranslator.fromStream(cqlStream, modelManager, libraryManager,
- options.toArray(new CqlTranslator.Options[options.size()]));
- } catch (IOException e) {
- throw new IllegalArgumentException(Msg.code(1661) + String.format("Errors occurred translating library: %s", e.getMessage()));
- }
-
- return translator;
- }
-
- public static Library translateLibrary(String cql, LibraryManager libraryManager, ModelManager modelManager) {
- return translateLibrary(new ByteArrayInputStream(cql.getBytes(StandardCharsets.UTF_8)), libraryManager,
- modelManager);
- }
-
- public static Library translateLibrary(InputStream cqlStream, LibraryManager libraryManager,
- ModelManager modelManager) {
- CqlTranslator translator = getTranslator(cqlStream, libraryManager, modelManager);
- return readLibrary(new ByteArrayInputStream(translator.toXml().getBytes(StandardCharsets.UTF_8)));
- }
-
- public static Library translateLibrary(CqlTranslator translator) {
- return readLibrary(new ByteArrayInputStream(translator.toXml().getBytes(StandardCharsets.UTF_8)));
- }
-}
diff --git a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/helper/UsingHelper.java b/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/helper/UsingHelper.java
deleted file mode 100644
index 6d46946da94..00000000000
--- a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/helper/UsingHelper.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package ca.uhn.fhir.cql.common.helper;
-
-/*-
- * #%L
- * HAPI FHIR JPA Server - Clinical Quality Language
- * %%
- * Copyright (C) 2014 - 2023 Smile CDR, Inc.
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import org.apache.commons.lang3.tuple.Triple;
-import org.cqframework.cql.elm.execution.Library.Usings;
-import org.cqframework.cql.elm.execution.UsingDef;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class UsingHelper {
-
- private static Map urlsByModelName = new HashMap() {
- private static final long serialVersionUID = 1L;
-
- {
- put("FHIR", "http://hl7.org/fhir");
- put("QDM", "urn:healthit-gov:qdm:v5_4");
- }
- };
-
- // Returns a list of (Model, Version, Url) for the usings in library. The
- // "System" using is excluded.
- public static List> getUsingUrlAndVersion(Usings usings) {
- if (usings == null || usings.getDef() == null) {
- return Collections.emptyList();
- }
-
- List> usingDefs = new ArrayList<>();
- for (UsingDef def : usings.getDef()) {
-
- if (def.getLocalIdentifier().equals("System"))
- continue;
-
- usingDefs.add(Triple.of(def.getLocalIdentifier(), def.getVersion(),
- urlsByModelName.get(def.getLocalIdentifier())));
- }
-
- return usingDefs;
- }
-}
diff --git a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/provider/EvaluationProviderFactory.java b/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/provider/EvaluationProviderFactory.java
deleted file mode 100644
index 5b640614878..00000000000
--- a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/provider/EvaluationProviderFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package ca.uhn.fhir.cql.common.provider;
-
-/*-
- * #%L
- * HAPI FHIR JPA Server - Clinical Quality Language
- * %%
- * Copyright (C) 2014 - 2023 Smile CDR, Inc.
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import ca.uhn.fhir.rest.api.server.RequestDetails;
-import org.opencds.cqf.cql.engine.data.DataProvider;
-import org.opencds.cqf.cql.engine.terminology.TerminologyProvider;
-
-// TODO: This interface is a partial duplicate of the provider factory interface
-// in the cql service layer. We need another round of refactoring to consolidate that.
-public interface EvaluationProviderFactory {
- DataProvider createDataProvider(String model, String version, RequestDetails theRequestDetails);
-
- DataProvider createDataProvider(String model, String version, String url, String user, String pass, RequestDetails theRequestDetails);
-
- DataProvider createDataProvider(String model, String version, TerminologyProvider terminologyProvider, RequestDetails theRequestDetails);
-
- TerminologyProvider createTerminologyProvider(String model, String version, String url, String user,
- String pass);
-}
diff --git a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/provider/LibraryContentProvider.java b/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/provider/LibraryContentProvider.java
deleted file mode 100644
index dd94eaec4d8..00000000000
--- a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/provider/LibraryContentProvider.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package ca.uhn.fhir.cql.common.provider;
-
-/*-
- * #%L
- * HAPI FHIR JPA Server - Clinical Quality Language
- * %%
- * Copyright (C) 2014 - 2023 Smile CDR, Inc.
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import org.cqframework.cql.cql2elm.FhirLibrarySourceProvider;
-import org.hl7.elm.r1.VersionedIdentifier;
-import org.opencds.cqf.cql.evaluator.cql2elm.content.LibraryContentType;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.util.function.Function;
-
-public class LibraryContentProvider
- implements org.opencds.cqf.cql.evaluator.cql2elm.content.LibraryContentProvider {
- private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(LibraryContentProvider.class);
-
- private FhirLibrarySourceProvider innerProvider;
- private LibraryResolutionProvider provider;
- private Function> getAttachments;
- private Function getContentType;
- private Function getContent;
-
- public LibraryContentProvider(LibraryResolutionProvider provider,
- Function> getAttachments,
- Function getContentType, Function getContent) {
-
- this.innerProvider = new FhirLibrarySourceProvider();
-
- this.provider = provider;
- this.getAttachments = getAttachments;
- this.getContentType = getContentType;
- this.getContent = getContent;
- }
-
- @Override
- public InputStream getLibraryContent(VersionedIdentifier versionedIdentifier, LibraryContentType libraryContentType){
-
- // TODO: Support loading ELM
- if (libraryContentType != LibraryContentType.CQL) {
- return null;
- }
-
- try {
- LibraryType lib = this.provider.resolveLibraryByName(versionedIdentifier.getId(),
- versionedIdentifier.getVersion());
- for (AttachmentType attachment : this.getAttachments.apply(lib)) {
- if ("text/cql".equals(this.getContentType.apply(attachment))) {
- return new ByteArrayInputStream(this.getContent.apply(attachment));
- }
- }
- } catch (Exception e) {
- ourLog.warn("Failed to parse Library source for VersionedIdentifier '" + versionedIdentifier + "'!"
- + System.lineSeparator() + e.getMessage(), e);
- }
-
- return this.innerProvider.getLibrarySource(versionedIdentifier);
- }
-}
diff --git a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/provider/LibraryResolutionProvider.java b/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/provider/LibraryResolutionProvider.java
deleted file mode 100644
index 205db4a9960..00000000000
--- a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/provider/LibraryResolutionProvider.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package ca.uhn.fhir.cql.common.provider;
-
-/*-
- * #%L
- * HAPI FHIR JPA Server - Clinical Quality Language
- * %%
- * Copyright (C) 2014 - 2023 Smile CDR, Inc.
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import ca.uhn.fhir.rest.api.server.RequestDetails;
-
-import java.util.function.Function;
-
-public interface LibraryResolutionProvider {
- static int compareVersions(String version1, String version2) {
- // Treat null as MAX VERSION
- if (version1 == null && version2 == null) {
- return 0;
- }
-
- if (version1 != null && version2 == null) {
- return -1;
- }
-
- if (version1 == null && version2 != null) {
- return 1;
- }
-
- String[] string1Vals = version1.split("\\.");
- String[] string2Vals = version2.split("\\.");
-
- int length = Math.max(string1Vals.length, string2Vals.length);
-
- for (int i = 0; i < length; i++)
- {
- Integer v1 = (i < string1Vals.length)?Integer.parseInt(string1Vals[i]):0;
- Integer v2 = (i < string2Vals.length)?Integer.parseInt(string2Vals[i]):0;
-
- //Making sure Version1 bigger than version2
- if (v1 > v2)
- {
- return 1;
- }
- //Making sure Version1 smaller than version2
- else if (v1 < v2) {
- return -1;
- }
- }
-
- //Both are equal
- return 0;
- }
-
- LibraryType resolveLibraryById(String libraryId, RequestDetails theRequestDetails);
-
- LibraryType resolveLibraryByName(String libraryName, String libraryVersion);
-
- LibraryType resolveLibraryByCanonicalUrl(String libraryUrl, RequestDetails theRequestDetails);
-
-
- // This function assumes that you're selecting from a set of libraries with the same name.
- // It returns the closest matching version, or the max version if no version is specified.
- static LibraryType selectFromList(Iterable libraries, String libraryVersion, Function getVersion) {
- LibraryType library = null;
- LibraryType maxVersion = null;
- for (LibraryType l : libraries) {
- String currentVersion = getVersion.apply(l);
- if ((libraryVersion != null && currentVersion.equals(libraryVersion)) ||
- (libraryVersion == null && currentVersion == null)) {
- library = l;
- }
-
- if (maxVersion == null || compareVersions(
- getVersion.apply(maxVersion),
- getVersion.apply(l)) < 0) {
- maxVersion = l;
- }
- }
-
- // If we were not given a version, return the highest found
- if (libraryVersion == null && maxVersion != null) {
- return maxVersion;
- }
-
- return library;
- }
-
- // Hmmm... Probably need to think through this use case a bit more.
- // Should we throw an exception? Should this be a different interface?
- void update(LibraryType library);
-}
diff --git a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/retrieve/JpaFhirRetrieveProvider.java b/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/retrieve/JpaFhirRetrieveProvider.java
deleted file mode 100644
index c369ceac7f6..00000000000
--- a/hapi-fhir-jpaserver-cql/src/main/java/ca/uhn/fhir/cql/common/retrieve/JpaFhirRetrieveProvider.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package ca.uhn.fhir.cql.common.retrieve;
-
-/*-
- * #%L
- * HAPI FHIR JPA Server - Clinical Quality Language
- * %%
- * Copyright (C) 2014 - 2023 Smile CDR, Inc.
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import ca.uhn.fhir.jpa.api.dao.DaoRegistry;
-import ca.uhn.fhir.jpa.api.dao.IFhirResourceDao;
-import ca.uhn.fhir.model.api.IQueryParameterType;
-import ca.uhn.fhir.rest.api.server.IBundleProvider;
-import ca.uhn.fhir.rest.api.server.RequestDetails;
-import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.opencds.cqf.cql.engine.fhir.retrieve.SearchParamFhirRetrieveProvider;
-import org.opencds.cqf.cql.engine.fhir.searchparam.SearchParameterMap;
-import org.opencds.cqf.cql.engine.fhir.searchparam.SearchParameterResolver;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-@Component
-public class JpaFhirRetrieveProvider extends SearchParamFhirRetrieveProvider {
-
- private static final Logger logger = LoggerFactory.getLogger(JpaFhirRetrieveProvider.class);
-
- private final DaoRegistry registry;
- private final RequestDetails myRequestDetails;
-
- @Autowired
- public JpaFhirRetrieveProvider(DaoRegistry registry, SearchParameterResolver searchParameterResolver, RequestDetails theRequestDetails) {
- super(searchParameterResolver);
- this.registry = registry;
- myRequestDetails = theRequestDetails;
- }
-
- @Override
- protected Iterable