Skip to content
Merged
Show file tree
Hide file tree
Changes from 39 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
a2a0a8a
pom bump to 7.0.0 (#5615)
longma1 Jan 22, 2024
b982abb
Check index existence on raw SQL creation (#5624)
tadgh Jan 24, 2024
47867fc
5621 deadlock on caffeine cache when creating a resource with conditi…
epeartree Jan 24, 2024
4b1ac77
Searching with more than one chained Bundle SearchParameter returns i…
nathandoef Jan 24, 2024
ba28ff9
Avoiding Exception being thrown on @EventListener invocation (#5628)
epeartree Jan 25, 2024
1441a90
simple fix (#5630)
longma1 Jan 25, 2024
224e569
Incorrect version of auto versioned reference for conditional update …
volodymyr-korzh Jan 26, 2024
d3876c5
Oracle: Ensure migrated database still takes large resource text upd…
Jan 26, 2024
c7fd015
Fix expansion for `ValueSet` with no concepts based on CodeSystem `ur…
Jan 29, 2024
5004907
$expunge operation ignoring ExpungeThreadCount setting in certain cas…
volodymyr-korzh Jan 30, 2024
94e932c
Fix Measure group id null pointer exception (#5620)
JPercival Jan 30, 2024
16aa9fc
Rule evaluation: Allow Bundles with PATCH Parameters (#5641)
Jan 30, 2024
5ed30f3
Prevent batch2 job execution to stop for empty chunk when last job st…
jmarchionatto Jan 30, 2024
59f7d4a
Index review fixes (#5649)
michaelabuckley Jan 31, 2024
ec1b8fe
Fix conditional creates without leading '?' (#5646)
Jan 31, 2024
0537ab5
Searching for Bundles with read all Bundles permission returns 403 (#…
nathandoef Feb 2, 2024
0f3c744
Fix NullPointerException when performing a system bulk export in the …
Feb 2, 2024
8f249a4
Bump json-path
tadgh Feb 2, 2024
992ee04
Pin parrson
tadgh Feb 2, 2024
5ebfe9f
Bump elastic
tadgh Feb 2, 2024
a66a94d
Bump spring version
tadgh Feb 2, 2024
42d28fe
Exclude JDBC
tadgh Feb 2, 2024
14a489c
Serializing changes for sensitive data (#5655)
tadgh Feb 3, 2024
285fde3
Revert change to other safe version to stop problem with deprecated f…
tadgh Feb 4, 2024
d63d3ca
Rel 7 0 CVE (#5663)
tadgh Feb 4, 2024
ace3fcc
Descendent fix (#5669)
tadgh Feb 5, 2024
de0ddcc
$poll-export-status operation with PatientIdPartitionInterceptor fail…
Feb 7, 2024
a6c2bef
5654 measurescorer bug for denominator exception (#5677)
Capt-Mac Feb 8, 2024
978a678
Merge branch 'rel_7_0_cve' into rel_7_0
tadgh Feb 9, 2024
742105f
Merge branch 'rel_7_0' of github.com:hapifhir/hapi-fhir into rel_7_0
tadgh Feb 9, 2024
f556ba4
Revert Remote Terminology lookup operation to support all types of Co…
Feb 10, 2024
5c84b67
version bump to 7.0.0
Feb 12, 2024
6d7fd73
pipeline fix
Feb 12, 2024
0c3deda
Update java home
jamesagnew Feb 12, 2024
28d88b1
Updating version to: 7.0.1 post release.
markiantorno Feb 13, 2024
40981fd
mergeback 2 from 7.0.0
Feb 20, 2024
315d673
post mergeback cleanup
Feb 20, 2024
3a9c5fa
bump clinical-reasoning.version to pre17
Feb 20, 2024
de644e5
test fix
Feb 20, 2024
c4df944
Merge branch 'master' of https://github.com/hapifhir/hapi-fhir into r…
Feb 23, 2024
38dbe9b
version bump to 7.1.5-snapshot
Feb 23, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@ public enum VersionEnum {

V7_0_0,
V7_0_1,

V7_1_0,
V7_2_0;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
type: fix
issue: 5654
title: "Fixed a MeasureReport measureScoring bug impacting any measures currently using denominator-exception population will
incorrectly calculate the score without following specification. This bug adds an extension to MeasureReport Groups to capture calculated denominator and
numerator to bring transparency to the measureScore calculation and act as a dataSource of measureScore instead of behind the scenes calculations."
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
type: fix
issue: 5680
title: "Previously, after registering built-in interceptor `PatientIdPartitionInterceptor`, while performing
an async system bulk export, the `$poll-export-status` operation would fail with a `NullPointerException`. This has been fixed."
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
type: fix
issue: 5700
title: "Previously (this release cycle), when you call `RemoteTerminologyServiceValidationSupport` method `lookupCode`
with a `CodeSystem` that has properties that are not `string` or `Coding`, the method would throw an exception.
It should instead accept any type and convert any unsupported type to `string`. This has been fixed."
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package ca.uhn.fhir.jpa.interceptor;

import ca.uhn.fhir.i18n.Msg;
import ca.uhn.fhir.interceptor.model.ReadPartitionIdRequestDetails;
import ca.uhn.fhir.interceptor.model.RequestPartitionId;
import ca.uhn.fhir.jpa.api.model.DaoMethodOutcome;
import ca.uhn.fhir.jpa.model.config.PartitionSettings;
import ca.uhn.fhir.jpa.model.entity.ResourceTable;
Expand All @@ -10,19 +12,28 @@
import ca.uhn.fhir.jpa.util.SqlQuery;
import ca.uhn.fhir.model.api.Include;
import ca.uhn.fhir.rest.api.Constants;
import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
import ca.uhn.fhir.rest.api.server.IBundleProvider;
import ca.uhn.fhir.rest.api.server.SystemRequestDetails;
import ca.uhn.fhir.rest.api.server.bulk.BulkExportJobParameters;
import ca.uhn.fhir.rest.param.ReferenceParam;
import ca.uhn.fhir.rest.param.TokenOrListParam;
import ca.uhn.fhir.rest.param.TokenParam;
import ca.uhn.fhir.rest.server.exceptions.MethodNotAllowedException;
import ca.uhn.fhir.rest.server.provider.BulkDataExportProvider;
import ca.uhn.fhir.rest.server.provider.ProviderConstants;
import ca.uhn.fhir.util.BundleBuilder;
import ca.uhn.fhir.util.MultimapCollector;
import com.google.common.base.Charsets;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimap;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.commons.io.IOUtils;
import org.apache.http.Header;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.hl7.fhir.r4.model.Bundle;
import org.hl7.fhir.r4.model.Encounter;
import org.hl7.fhir.r4.model.Enumerations;
Expand All @@ -36,6 +47,7 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.SpyBean;

import java.io.IOException;
import java.util.List;
Expand All @@ -49,8 +61,11 @@
import static org.hamcrest.Matchers.either;
import static org.hamcrest.Matchers.matchesPattern;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.verify;

public class PatientIdPartitionInterceptorTest extends BaseResourceProviderR4Test {
public static final int ALTERNATE_DEFAULT_ID = -1;
Expand Down Expand Up @@ -542,6 +557,70 @@ private Patient createPatientA() {
return (Patient)update.getResource();
}

@Test
public void testIdentifyForRead_serverOperation_returnsAllPartitions() {
ReadPartitionIdRequestDetails readRequestDetails = ReadPartitionIdRequestDetails.forServerOperation(ProviderConstants.OPERATION_EXPORT);
RequestPartitionId requestPartitionId = mySvc.identifyForRead(readRequestDetails, mySrd);
assertEquals(requestPartitionId, RequestPartitionId.allPartitions());
assertEquals(RestOperationTypeEnum.EXTENDED_OPERATION_SERVER, readRequestDetails.getRestOperationType());
}

@Test
public void testSystemBulkExport_withPatientIdPartitioningWithNoResourceType_usesNonPatientSpecificPartition() throws IOException {
HttpPost post = new HttpPost(myServer.getBaseUrl() + "/" + ProviderConstants.OPERATION_EXPORT);
post.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RESPOND_ASYNC);

try (CloseableHttpResponse postResponse = myServer.getHttpClient().execute(post)){
ourLog.info("Response: {}",postResponse);
assertEquals(202, postResponse.getStatusLine().getStatusCode());
assertEquals("Accepted", postResponse.getStatusLine().getReasonPhrase());
}
}

@Test
public void testSystemBulkExport_withPatientIdPartitioningWithResourceType_exportUsesNonPatientSpecificPartition() throws IOException {
HttpPost post = new HttpPost(myServer.getBaseUrl() + "/" + ProviderConstants.OPERATION_EXPORT);
post.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RESPOND_ASYNC);
post.addHeader(BulkDataExportProvider.PARAM_EXPORT_TYPE, "Patient");
post.addHeader(BulkDataExportProvider.PARAM_EXPORT_TYPE_FILTER, "Patient?");

try (CloseableHttpResponse postResponse = myServer.getHttpClient().execute(post)){
ourLog.info("Response: {}",postResponse);
assertEquals(202, postResponse.getStatusLine().getStatusCode());
assertEquals("Accepted", postResponse.getStatusLine().getReasonPhrase());
}
}

@Test
public void testSystemBulkExport_withPatientIdPartitioningWithResourceType_pollSuccessful() throws IOException {
final BulkExportJobParameters options = new BulkExportJobParameters();
options.setExportStyle(BulkExportJobParameters.ExportStyle.SYSTEM);
options.setOutputFormat(Constants.CT_FHIR_NDJSON);

HttpPost post = new HttpPost(myServer.getBaseUrl() + "/" + ProviderConstants.OPERATION_EXPORT);
post.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RESPOND_ASYNC);
post.addHeader(BulkDataExportProvider.PARAM_EXPORT_TYPE, "Patient"); // ignored when computing partition
post.addHeader(BulkDataExportProvider.PARAM_EXPORT_TYPE_FILTER, "Patient?");

String locationUrl;

try (CloseableHttpResponse postResponse = myServer.getHttpClient().execute(post)){
ourLog.info("Response: {}",postResponse);
assertEquals(202, postResponse.getStatusLine().getStatusCode());
assertEquals("Accepted", postResponse.getStatusLine().getReasonPhrase());

Header locationHeader = postResponse.getFirstHeader(Constants.HEADER_CONTENT_LOCATION);
assertNotNull(locationHeader);
locationUrl = locationHeader.getValue();
}

HttpGet get = new HttpGet(locationUrl);
try (CloseableHttpResponse postResponse = myServer.getHttpClient().execute(get)) {
String responseContent = IOUtils.toString(postResponse.getEntity().getContent(), Charsets.UTF_8);
ourLog.info("Response: {}", responseContent);
assertEquals(202, postResponse.getStatusLine().getStatusCode());
}
}
@Test
public void testSystemOperation_withNoResourceType_success() throws IOException {
HttpPost post = new HttpPost(myServer.getBaseUrl() + "/" + ProviderConstants.OPERATION_EXPORT);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1843,6 +1843,7 @@
"guidance": "* For Medicare plans, I-SNP and LTI exclusions are not included in the measure calculation logic and need to be programmed manually. Administrative data must be used for these exclusions.\n*Non-administrative data may be used for the frailty and advanced illness exclusion.\n<p>**Allocation:**<br/>The member was enrolled with a medical benefit throughout the Participation Period.</p><p>No more than one gap in enrollment of up to 45 days for each full calendar year of the Participation Period (i.e., the Measurement Period and the year prior to the Measurement Period).</p><p>No gaps in enrollment are allowed from October 1 two years prior to the Measurement Period through December 31 two years prior to the Measurement Period.</p><p>**Reporting:**<br/>For Medicare plans, the SES stratifications are mutually exclusive. NCQA calculates a total rate for Medicare plans by adding all six Medicare stratifications.</p><p>SES and product line stratifications are not included in the measure calculation logic and need to be programmed manually.</p><p>**Stratification:**<br/>1. Commercial.\n2. Medicaid.\n3. Medicare: Non-LIS/DE, Nondisability.\n4. Medicare: LIS/DE.\n5. Medicare: Disability\n6. Medicare: LIS/DE and Disability.\n7. Medicare: Other.\n8. Medicare: Unknown.</p>",
"group": [ {
"population": [ {
"id": "initial-population",
"code": {
"coding": [ {
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
Expand All @@ -1856,6 +1857,7 @@
"expression": "Initial Population"
}
}, {
"id": "denominator",
"code": {
"coding": [ {
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
Expand All @@ -1869,6 +1871,7 @@
"expression": "Denominator"
}
}, {
"id": "denominator-exclusion",
"code": {
"coding": [ {
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
Expand All @@ -1882,6 +1885,7 @@
"expression": "Exclusions"
}
}, {
"id": "numerator",
"code": {
"coding": [ {
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
Expand All @@ -1897,6 +1901,7 @@
} ]
} ],
"supplementalData": [ {
"id": "Enrolled-During-Participation-Period",
"code": {
"text": "Enrolled During Participation Period"
},
Expand All @@ -1911,6 +1916,7 @@
"expression": "Enrolled During Participation Period"
}
}, {
"id": "participation-period",
"code": {
"text": "Participation Period"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147712,7 +147712,7 @@
}
],
"library": [
"http://ecqi.healthit.gov/ecqms/Library/ColorectalCancerScreeningsFHIR|0.0.001"
"http://ecqi.healthit.gov/ecqms/Library/ColorectalCancerScreeningsFHIR"
],
"disclaimer": "The performance Measure is not a clinical guideline and does not establish a standard of medical care, and has not been tested for all potential applications. THE MEASURE AND SPECIFICATIONS ARE PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY KIND.\n \nDue to technical limitations, registered trademarks are indicated by (R) or [R] and unregistered trademarks are indicated by (TM) or [TM].",
"scoring": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@
}
],
"library": [
"http://localhost:8080/fhir/Library/library-EXM104|8.2.000"
"http://localhost:8080/fhir/Library/EXM104|8.2.000"
],
"disclaimer": "These performance measures are not clinical guidelines and do not establish a standard of medical care, and have not been tested for all potential applications. The measures and specifications are provided without warranty.",
"scoring": {
Expand Down Expand Up @@ -177,6 +177,7 @@
"id": "group-1",
"population": [
{
"id": "initial-population",
"code": {
"coding": [
{
Expand All @@ -192,6 +193,7 @@
}
},
{
"id": "numerator",
"code": {
"coding": [
{
Expand All @@ -207,6 +209,7 @@
}
},
{
"id": "denominator",
"code": {
"coding": [
{
Expand All @@ -222,6 +225,7 @@
}
},
{
"id": "denominator-exclusion",
"code": {
"coding": [
{
Expand All @@ -237,6 +241,7 @@
}
},
{
"id": "denominator-exception",
"code": {
"coding": [
{
Expand Down Expand Up @@ -341,7 +346,7 @@
{
"resource": {
"resourceType": "Library",
"id": "library-EXM104",
"id": "EXM104",
"extension": [
{
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-softwaresystem",
Expand All @@ -350,7 +355,7 @@
}
}
],
"url": "http://localhost:8080/fhir/Library/library-EXM104",
"url": "http://localhost:8080/fhir/Library/EXM104",
"version": "8.2.000",
"name": "library-EXM104",
"status": "active",
Expand Down Expand Up @@ -600,7 +605,7 @@
},
"request": {
"method": "PUT",
"url": "Library/library-EXM104"
"url": "Library/EXM104"
}
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1377,6 +1377,7 @@
"id": "group-1",
"population": [
{
"id": "initial-population",
"code": {
"coding": [
{
Expand All @@ -1392,6 +1393,7 @@
}
},
{
"id": "denominator",
"code": {
"coding": [
{
Expand All @@ -1407,6 +1409,7 @@
}
},
{
"id": "numerator",
"code": {
"coding": [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1372,6 +1372,7 @@
"id": "group-1",
"population": [
{
"id": "initial-population",
"code": {
"coding": [
{
Expand All @@ -1387,6 +1388,7 @@
}
},
{
"id": "numerator",
"code": {
"coding": [
{
Expand All @@ -1402,6 +1404,7 @@
}
},
{
"id": "denominator",
"code": {
"coding": [
{
Expand All @@ -1417,6 +1420,7 @@
}
},
{
"id": "denominator-exclusion",
"code": {
"coding": [
{
Expand All @@ -1436,6 +1440,7 @@
],
"supplementalData": [
{
"id": "sde-ethnicity",
"code": {
"text": "sde-ethnicity"
},
Expand All @@ -1455,6 +1460,7 @@
}
},
{
"id": "sde-payer",
"code": {
"text": "sde-payer"
},
Expand All @@ -1474,6 +1480,7 @@
}
},
{
"id": "sde-race",
"code": {
"text": "sde-race"
},
Expand All @@ -1493,6 +1500,7 @@
}
},
{
"id": "sde-sex",
"code": {
"text": "sde-sex"
},
Expand Down
Loading