Rel 7 0 mb 2 (#5714)

* pom bump to 7.0.0 (#5615)

* pom bump to 7.0.0

* add version enum

* fixed feb release name

---------

Co-authored-by: Long Ma <long@smilecdr.com>

* Check index existence on raw SQL creation (#5624)

* Add conditional check on index existence before we try again

* Add conditional check on index existence before we try again

* Changelog

* remit

* remit

* debug statements

* 5621 deadlock on caffeine cache when creating a resource with conditional create (#5622)

* Modifying the CacheProvider to avoid doing db I/O within the cache miss value supplier callback.

* Setting the initial capacity of instantiated caches to the cache max size to avoid resizing during operations.

* adding changelog and spotless.

* Fixing typo.

* Addressing comments from code review.

---------

Co-authored-by: peartree <etienne.poirier@smilecdr.com>

* Searching with more than one chained Bundle SearchParameter returns incorrect results (#5614)

* Failing test

* fix

* changelog

* Avoiding Exception being thrown on @EventListener invocation (#5628)

* replaced EventListener annotation with @PreDestroy

* adding changelog

---------

Co-authored-by: peartree <etienne.poirier@smilecdr.com>

* simple fix (#5630)

Co-authored-by: Long Ma <long@smilecdr.com>

* Incorrect version of auto versioned reference for conditional update with urn id placeholder (#5625)

* Incorrect version from versioned_references.auto_at_paths for conditional update - implementation

* Oracle:  Ensure migrated database still takes large resource text updates (#5629)

* First pass at fix to Oracle HFJ_RES_VER.RES_TEXT_VC migration.

* First stab at agreed upon solution.

* Fix error with 4001 by removing unnecessary annotation.

* Spotless and TODO.

* Remove annotation for good and set length to LONG32.

* Fix copyright year.

* Finalize changelog.

* Remove migration changes.  Fix unit test.

* Fix compile error.

* Log output.

* Refactor resource history code into new ResourceHistoryCalculator.

* Spotless.

* Convert record to POJO.

* Restore pre-17 switch statement.

* Finalize new resource history calculator code and tests.

* Spotless.

* Remove logging.

* Update hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/7_0_0/5633-oracle-hfj-res-ver-clob-migration.yaml

Apply code reviewer suggestion

Co-authored-by: Michael Buckley <michaelabuckley@gmail.com>

* Code review feedback.

---------

Co-authored-by: Michael Buckley <michaelabuckley@gmail.com>

* Fix expansion for `ValueSet` with no concepts based on CodeSystem `urn:ietf:bcp:13` (#5638)

* When fetching the mimetype code system, return empty CodeSystem with NOTSUPPORTED content. Update expansion logic to handle this case. Add some test cases.

* Minor change to fix test

* Rename changelog file

* Remove TODOs as they're replaced by reported issue

* Revert accidental change added with TODO removal

* $expunge operation ignoring ExpungeThreadCount setting in certain cases (#5637)

* $expunge operation ignoring ExpungeThreadCount setting in certain cases - implementation

* Fix Measure group id null pointer exception (#5620)

* Update to new version of clinical reasoning, includes a fix for null pointers on Measure group id

* add changelog

---------

Co-authored-by: Justin McKelvy <60718638+Capt-Mac@users.noreply.github.com>

* Rule evaluation:  Allow Bundles with PATCH Parameters (#5641)

* Remove parameters clause.

* Finalize changelog.  Add tests.  Finalize implementation.

* Undo changes to this test.

* Revert all changes to FhirQueryRuleImplTest.  Add new RuleImplOpTest.  Ensure that proper nested Bundle is created for test and other fixes.

* Tweak test.

* Use real rule applier in test and remove all mocks.

* Prevent batch2 job execution to stop for empty chunk when last job st… (#5635)

* Prevent batch2 job execution to stop for empty chunk when last job step is a reduction.
Add output to bulk export result even when empty.

* Fix test

* Unimportant change to force fresh build

* Implement review suggestions

---------

Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>

* Index review fixes (#5649)

* Don't hold locks while adding indices during upgrade.
* concurrent indexing is non-transactional in PG.

* Fix conditional creates without leading '?' (#5646)

* First commit with failing test.

* More tests and logs.

* More logs

* Try new solution for BaseTransactionProcessor.performIdSubstitutionsInMatchUrl().

* Simplify solution.  Add more tests.

* Changelog.

* javadoc

* Searching for Bundles with read all Bundles permission returns 403 (#5644)

* failing test

* another failing test case

* fix

* changelog

* fix bug

* spotless

* cr

* Fix NullPointerException when performing a system bulk export in the presence of PatientIdPartitionInterceptor. (#5660)

* Bump json-path

* Pin parrson

* Bump elastic

* Bump spring version

* Exclude JDBC

* Serializing changes for sensitive data (#5655)

* Add new senstiive data serializer

* Add new senstiive data serializer

* Add new senstiive data serializer

* Remove dead comments

* Change up the test

* review comments

* wip

* Tighten tests and push annotation down

* Tighten tests and push annotation down

* Changelog

* Add test

* 7.0.1-SNAPSHOT bump

* Error code

* Add method used by CDR

* add version enum

* Fix test

* Revert change to other safe version to stop problem with deprecated field

* Rel 7 0 CVE (#5663)

* Bump json-path

* Pin parrson

* Bump elastic

* Bump spring version

* Exclude JDBC

* Descendent fix (#5669)

* Fix "is-a" ValueSet expansion, add "descendent-of" support

* Fixed tests in DSTU3 and R5

* Trigger new build

* Revert "Trigger new build"

This reverts commit 46c672b338.

* fix default partition setting on resource (#5617)

* fix default partition setting on resource

* changelog

* Handle DEFAULT partition in rule checker.

* Fix spotless

---------

Co-authored-by: Michael Buckley <michaelabuckley@gmail.com>
Co-authored-by: James Agnew <jamesagnew@gmail.com>

* pom bump, doc add, version enum add (#5616)

Co-authored-by: Long Ma <long@smilecdr.com>

* fix default partition setting on resource (#5618)

* fix default partition setting on resource
* Handle DEFAULT partition in rule checker.

Co-authored-by: Ken Stevens <khstevens@gmail.com>

* Add setting to make broker not use JacksonMessageConverter (#5611)

* Add setting to make broker not use JacksonMessageConverter

* Add changelog

* Implement suggestions

---------

Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>

* Fix version

* add changelog, add attribution, remove accidental bring-overs

* add changelog, add attribution, remove accidental bring-overs

* Finish jira section

---------

Co-authored-by: Ole Hedegaard <ohe@trifork.com>
Co-authored-by: Ken Stevens <khstevens@gmail.com>
Co-authored-by: Michael Buckley <michaelabuckley@gmail.com>
Co-authored-by: James Agnew <jamesagnew@gmail.com>
Co-authored-by: longma1 <32119004+longma1@users.noreply.github.com>
Co-authored-by: Long Ma <long@smilecdr.com>
Co-authored-by: jmarchionatto <60409882+jmarchionatto@users.noreply.github.com>
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>

* $poll-export-status operation with PatientIdPartitionInterceptor fails with NullPointerException (#5681)

* Fix NullPointerException when performing a system bulk export in the presence of PatientIdPartitionInterceptor.

* Fix NPE on -export-status operation with PatientIdPartitionInterceptor

* 5654 measurescorer bug for denominator exception (#5677)

* update measure bundles and tests for enforced populationId specification on Measure group resources

* bump CR version to PRE17

* fix bug in versionEnumTest

* Update hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/7_0_0/5654-measurescorer-bug.yaml

Co-authored-by: Tadgh <garygrantgraham@gmail.com>

---------

Co-authored-by: Tadgh <garygrantgraham@gmail.com>

* Revert Remote Terminology lookup operation to support all types of CodeSystem property and convert to them to string type. (#5698)

* Revert Remote Terminology lookup operation to support all types of CodeSystem property and convert to them to string type.

* Spotless fix

* Address code review comments

* version bump to 7.0.0

* pipeline fix

* Update java home

* Updating version to: 7.0.1 post release.

* post mergeback cleanup

* bump clinical-reasoning.version to pre17

* test fix

* version bump to 7.1.5-snapshot

---------

Co-authored-by: Long Ma <long@smilecdr.com>
Co-authored-by: Tadgh <garygrantgraham@gmail.com>
Co-authored-by: Etienne Poirier <33007955+epeartree@users.noreply.github.com>
Co-authored-by: peartree <etienne.poirier@smilecdr.com>
Co-authored-by: Nathan Doef <n.doef@protonmail.com>
Co-authored-by: volodymyr-korzh <132366313+volodymyr-korzh@users.noreply.github.com>
Co-authored-by: Luke deGruchy <luke.degruchy@smilecdr.com>
Co-authored-by: Michael Buckley <michaelabuckley@gmail.com>
Co-authored-by: Martha Mitran <martha.mitran@smilecdr.com>
Co-authored-by: JP <jonathan.i.percival@gmail.com>
Co-authored-by: Justin McKelvy <60718638+Capt-Mac@users.noreply.github.com>
Co-authored-by: jmarchionatto <60409882+jmarchionatto@users.noreply.github.com>
Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
Co-authored-by: Ole Hedegaard <ohe@trifork.com>
Co-authored-by: Ken Stevens <khstevens@gmail.com>
Co-authored-by: James Agnew <jamesagnew@gmail.com>
Co-authored-by: markiantorno <markiantorno@gmail.com>
This commit is contained in:
longma1 2024-02-23 11:03:26 -07:00 committed by GitHub
parent e759bc0958
commit 28a1a4d4df
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
94 changed files with 305 additions and 215 deletions

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -136,7 +136,6 @@ public enum VersionEnum {
V7_0_0,
V7_0_1,
V7_1_0,
V7_2_0;

View File

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-bom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<packaging>pom</packaging>
<name>HAPI FHIR BOM</name>
@ -12,7 +12,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-cli</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -11,7 +11,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -3,7 +3,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -3,7 +3,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -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;
@ -10,19 +12,28 @@ import ca.uhn.fhir.jpa.searchparam.extractor.ISearchParamExtractor;
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;
@ -36,6 +47,7 @@ import org.junit.jupiter.api.AfterEach;
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;
@ -49,8 +61,11 @@ import static org.hamcrest.Matchers.containsString;
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;
@ -542,6 +557,70 @@ public class PatientIdPartitionInterceptorTest extends BaseResourceProviderR4Tes
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);

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -7,7 +7,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -7,7 +7,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -7,7 +7,7 @@
<parent>
<artifactId>hapi-fhir-serviceloaders</artifactId>
<groupId>ca.uhn.hapi.fhir</groupId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -7,7 +7,7 @@
<parent>
<artifactId>hapi-fhir-serviceloaders</artifactId>
<groupId>ca.uhn.hapi.fhir</groupId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -21,7 +21,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-caching-api</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
</dependency>
<dependency>

View File

@ -7,7 +7,7 @@
<parent>
<artifactId>hapi-fhir-serviceloaders</artifactId>
<groupId>ca.uhn.hapi.fhir</groupId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -7,7 +7,7 @@
<parent>
<artifactId>hapi-fhir</artifactId>
<groupId>ca.uhn.hapi.fhir</groupId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>hapi-deployable-pom</artifactId>
<groupId>ca.uhn.hapi.fhir</groupId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-spring-boot-samples</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
</parent>
<artifactId>hapi-fhir-spring-boot-sample-client-apache</artifactId>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-spring-boot-samples</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-spring-boot-samples</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-spring-boot</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -7,7 +7,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -7,7 +7,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -7,7 +7,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -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",
@ -1856,6 +1857,7 @@
"expression": "Initial Population"
}
}, {
"id": "denominator",
"code": {
"coding": [ {
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
@ -1869,6 +1871,7 @@
"expression": "Denominator"
}
}, {
"id": "denominator-exclusion",
"code": {
"coding": [ {
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
@ -1882,6 +1885,7 @@
"expression": "Exclusions"
}
}, {
"id": "numerator",
"code": {
"coding": [ {
"system": "http://terminology.hl7.org/CodeSystem/measure-population",
@ -1897,6 +1901,7 @@
} ]
} ],
"supplementalData": [ {
"id": "Enrolled-During-Participation-Period",
"code": {
"text": "Enrolled During Participation Period"
},
@ -1911,6 +1916,7 @@
"expression": "Enrolled During Participation Period"
}
}, {
"id": "participation-period",
"code": {
"text": "Participation Period"
},

View File

@ -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": {

View File

@ -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": {
@ -177,6 +177,7 @@
"id": "group-1",
"population": [
{
"id": "initial-population",
"code": {
"coding": [
{
@ -192,6 +193,7 @@
}
},
{
"id": "numerator",
"code": {
"coding": [
{
@ -207,6 +209,7 @@
}
},
{
"id": "denominator",
"code": {
"coding": [
{
@ -222,6 +225,7 @@
}
},
{
"id": "denominator-exclusion",
"code": {
"coding": [
{
@ -237,6 +241,7 @@
}
},
{
"id": "denominator-exception",
"code": {
"coding": [
{
@ -341,7 +346,7 @@
{
"resource": {
"resourceType": "Library",
"id": "library-EXM104",
"id": "EXM104",
"extension": [
{
"url": "http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-softwaresystem",
@ -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",
@ -600,7 +605,7 @@
},
"request": {
"method": "PUT",
"url": "Library/library-EXM104"
"url": "Library/EXM104"
}
},
{

View File

@ -1377,6 +1377,7 @@
"id": "group-1",
"population": [
{
"id": "initial-population",
"code": {
"coding": [
{
@ -1392,6 +1393,7 @@
}
},
{
"id": "denominator",
"code": {
"coding": [
{
@ -1407,6 +1409,7 @@
}
},
{
"id": "numerator",
"code": {
"coding": [
{

View File

@ -1372,6 +1372,7 @@
"id": "group-1",
"population": [
{
"id": "initial-population",
"code": {
"coding": [
{
@ -1387,6 +1388,7 @@
}
},
{
"id": "numerator",
"code": {
"coding": [
{
@ -1402,6 +1404,7 @@
}
},
{
"id": "denominator",
"code": {
"coding": [
{
@ -1417,6 +1420,7 @@
}
},
{
"id": "denominator-exclusion",
"code": {
"coding": [
{
@ -1436,6 +1440,7 @@
],
"supplementalData": [
{
"id": "sde-ethnicity",
"code": {
"text": "sde-ethnicity"
},
@ -1455,6 +1460,7 @@
}
},
{
"id": "sde-payer",
"code": {
"text": "sde-payer"
},
@ -1474,6 +1480,7 @@
}
},
{
"id": "sde-race",
"code": {
"text": "sde-race"
},
@ -1493,6 +1500,7 @@
}
},
{
"id": "sde-sex",
"code": {
"text": "sde-sex"
},

View File

@ -1372,6 +1372,7 @@
"id": "group-1",
"population": [
{
"id": "initial-population",
"code": {
"coding": [
{
@ -1387,6 +1388,7 @@
}
},
{
"id": "numerator",
"code": {
"coding": [
{
@ -1402,6 +1404,7 @@
}
},
{
"id": "denominator",
"code": {
"coding": [
{
@ -1417,6 +1420,7 @@
}
},
{
"id": "denominator-exclusion",
"code": {
"coding": [
{
@ -1436,6 +1440,7 @@
],
"supplementalData": [
{
"id": "sde-ethnicity",
"code": {
"text": "sde-ethnicity"
},
@ -1455,6 +1460,7 @@
}
},
{
"id": "sde-payer",
"code": {
"text": "sde-payer"
},
@ -1474,6 +1480,7 @@
}
},
{
"id": "sde-race",
"code": {
"text": "sde-race"
},
@ -1493,6 +1500,7 @@
}
},
{
"id": "sde-sex",
"code": {
"text": "sde-sex"
},

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -36,6 +36,7 @@ import ca.uhn.fhir.model.api.IQueryParameterType;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.param.ReferenceParam;
import ca.uhn.fhir.rest.server.exceptions.MethodNotAllowedException;
import ca.uhn.fhir.rest.server.provider.ProviderConstants;
import jakarta.annotation.Nonnull;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.IdType;
@ -151,7 +152,12 @@ public class PatientIdPartitionInterceptor {
break;
case EXTENDED_OPERATION_SERVER:
return provideNonPatientSpecificQueryResponse(theReadDetails);
String extendedOp = theReadDetails.getExtendedOperationName();
if (ProviderConstants.OPERATION_EXPORT.equals(extendedOp)
|| ProviderConstants.OPERATION_EXPORT_POLL_STATUS.equals(extendedOp)) {
return provideNonPatientSpecificQueryResponse(theReadDetails);
}
break;
default:
// nothing
}

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -12,7 +12,6 @@ import ca.uhn.fhir.i18n.Msg;
import ca.uhn.fhir.rest.api.SummaryEnum;
import ca.uhn.fhir.rest.client.api.IGenericClient;
import ca.uhn.fhir.rest.gclient.IQuery;
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
import ca.uhn.fhir.util.BundleUtil;
import ca.uhn.fhir.util.ParametersUtil;
import jakarta.annotation.Nonnull;
@ -314,8 +313,10 @@ public class RemoteTerminologyServiceValidationSupport extends BaseValidationSup
conceptProperty = new CodingConceptProperty(
propertyName, coding.getSystem(), coding.getCode(), coding.getDisplay());
break;
// TODO: add other property types as per FHIR spec https://github.com/hapifhir/hapi-fhir/issues/5699
default:
throw new InternalErrorException(Msg.code(2450) + "Property type " + fhirType + " is not supported.");
// other types will not fail for Remote Terminology
conceptProperty = new StringConceptProperty(propertyName, value.toString());
}
return conceptProperty;
}
@ -347,8 +348,10 @@ public class RemoteTerminologyServiceValidationSupport extends BaseValidationSup
conceptProperty =
new CodingConceptProperty(theName, coding.getSystem(), coding.getCode(), coding.getDisplay());
break;
// TODO: add other property types as per FHIR spec https://github.com/hapifhir/hapi-fhir/issues/5699
default:
throw new InternalErrorException(Msg.code(2451) + "Property type " + fhirType + " is not supported.");
// other types will not fail for Remote Terminology
conceptProperty = new StringConceptProperty(theName, theValue.toString());
}
return conceptProperty;
}
@ -447,8 +450,10 @@ public class RemoteTerminologyServiceValidationSupport extends BaseValidationSup
conceptProperty = new CodingConceptProperty(
propertyName, coding.getSystem(), coding.getCode(), coding.getDisplay());
break;
// TODO: add other property types as per FHIR spec https://github.com/hapifhir/hapi-fhir/issues/5699
default:
throw new InternalErrorException(Msg.code(2452) + "Property type " + fhirType + " is not supported.");
// other types will not fail for Remote Terminology
conceptProperty = new StringConceptProperty(propertyName, value.toString());
}
return conceptProperty;
}
@ -467,8 +472,10 @@ public class RemoteTerminologyServiceValidationSupport extends BaseValidationSup
conceptProperty =
new CodingConceptProperty(theName, coding.getSystem(), coding.getCode(), coding.getDisplay());
break;
// TODO: add other property types as per FHIR spec https://github.com/hapifhir/hapi-fhir/issues/5699
default:
throw new InternalErrorException(Msg.code(2453) + "Property type " + fhirType + " is not supported.");
// other types will not fail for Remote Terminology
conceptProperty = new StringConceptProperty(theName, theValue.toString());
}
return conceptProperty;
}

View File

@ -39,44 +39,11 @@ public interface ILookupCodeTest {
IResourceProvider getCodeSystemProvider();
}
@Nested
interface ILookupCodeUnsupportedPropertyTypeTest extends IValidationTest {
String getInvalidValueErrorCode();
String getInvalidValueErrorCodeForConvert();
@Override
IMySimpleCodeSystemProvider getCodeSystemProvider();
@Test
default void testLookupCode_forCodeSystemWithPropertyInvalidValue_throwsException() {
// test and verify
try {
getService().lookupCode(null, new LookupCodeRequest(CODE_SYSTEM, CODE, LANGUAGE, null));
fail();
} catch (InternalErrorException e) {
assertTrue(e.getMessage().contains(getInvalidValueErrorCode() + ": Property type " + getCodeSystemProvider().getPropertyValue().fhirType() + " is not supported"));
}
}
@Test
default void testCreateConceptProperty_forCodeSystemWithPropertyInvalidValue_throwsException() {
// test and verify
try {
RemoteTerminologyServiceValidationSupport.createConceptProperty("property", getCodeSystemProvider().getPropertyValue());
fail();
} catch (InternalErrorException e) {
assertTrue(e.getMessage().contains(getInvalidValueErrorCodeForConvert() + ": Property type " + getCodeSystemProvider().getPropertyValue().fhirType() + " is not supported"));
}
}
}
@Nested
interface ILookupCodeSupportedPropertyTest extends IValidationTest {
IMyCodeSystemProvider getCodeSystemProvider();
Stream<Arguments> getEmptyPropertyValues();
Stream<Arguments> getEmptyPropertyValues();
Stream<Arguments> getPropertyValues();

View File

@ -4,17 +4,14 @@ import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.support.IValidationSupport;
import ca.uhn.fhir.context.support.IValidationSupport.ConceptDesignation;
import ca.uhn.fhir.context.support.IValidationSupport.LookupCodeResult;
import ca.uhn.fhir.i18n.Msg;
import ca.uhn.fhir.jpa.model.util.JpaConstants;
import ca.uhn.fhir.rest.annotation.Operation;
import ca.uhn.fhir.rest.annotation.OperationParam;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.client.interceptor.LoggingInterceptor;
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
import ca.uhn.fhir.test.utilities.server.RestfulServerExtension;
import jakarta.servlet.http.HttpServletRequest;
import org.hl7.fhir.common.hapi.validation.ILookupCodeTest.ILookupCodeSupportedPropertyTest;
import org.hl7.fhir.common.hapi.validation.ILookupCodeTest.ILookupCodeUnsupportedPropertyTypeTest;
import org.hl7.fhir.common.hapi.validation.ILookupCodeTest.IMyCodeSystemProvider;
import org.hl7.fhir.common.hapi.validation.ILookupCodeTest.IMySimpleCodeSystemProvider;
import org.hl7.fhir.common.hapi.validation.support.RemoteTerminologyServiceValidationSupport;
@ -29,12 +26,17 @@ import org.hl7.fhir.dstu3.model.Type;
import org.hl7.fhir.dstu3.model.UriType;
import org.hl7.fhir.instance.model.api.IBaseDatatype;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.r4.model.DateTimeType;
import org.hl7.fhir.r4.model.DecimalType;
import org.hl7.fhir.r4.model.InstantType;
import org.hl7.fhir.r4.model.IntegerType;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.params.provider.Arguments;
import java.util.Calendar;
import java.util.List;
import java.util.stream.Stream;
@ -57,40 +59,6 @@ public class LookupCodeDstu3Test {
mySvc.addClientInterceptor(new LoggingInterceptor(true));
}
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@Nested
class LookupCodeUnsupportedPropertyTypeDstu3Test implements ILookupCodeUnsupportedPropertyTypeTest {
private final MySimplePropertyCodeSystemProviderDstu3 myMySimplePropertyCodeSystemProvider = new MySimplePropertyCodeSystemProviderDstu3();
@Override
public IMySimpleCodeSystemProvider getCodeSystemProvider() {
return myMySimplePropertyCodeSystemProvider;
}
@Override
public RemoteTerminologyServiceValidationSupport getService() {
return mySvc;
}
@Override
public String getInvalidValueErrorCode() {
return "HAPI-2450";
}
@Override
public String getInvalidValueErrorCodeForConvert() {
return "HAPI-2451";
}
@BeforeEach
public void before() {
// TODO: use another type when "code" is added to the supported types
myMySimplePropertyCodeSystemProvider.myPropertyName = "somePropertyName";
myMySimplePropertyCodeSystemProvider.myPropertyValue = new CodeType("someCode");
ourRestfulServerExtension.getRestfulServer().registerProvider(myMySimplePropertyCodeSystemProvider);
}
}
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@Nested
class ILookupCodeSupportedPropertyDstu3Test implements ILookupCodeSupportedPropertyTest {
@ -116,8 +84,13 @@ public class LookupCodeDstu3Test {
String type = theConceptProperty.getType();
switch (type) {
case IValidationSupport.TYPE_STRING -> {
assertTrue(theExpectedValue instanceof StringType);
StringType stringValue = (StringType) theExpectedValue;
if (!(theExpectedValue instanceof StringType stringValue)) {
// TODO: remove this branch to test other property types as per FHIR spec https://github.com/hapifhir/hapi-fhir/issues/5699
IValidationSupport.StringConceptProperty stringConceptProperty = (IValidationSupport.StringConceptProperty) theConceptProperty;
assertEquals(theExpectedValue.toString(), stringConceptProperty.getValue());
break;
}
// StringType stringValue = (StringType) theExpectedValue;
assertTrue(theConceptProperty instanceof StringConceptProperty);
StringConceptProperty stringConceptProperty = (StringConceptProperty) theConceptProperty;
assertEquals(stringValue.getValue(), stringConceptProperty.getValue());
@ -131,8 +104,10 @@ public class LookupCodeDstu3Test {
assertEquals(coding.getSystem(), codingConceptProperty.getCodeSystem());
assertEquals(coding.getDisplay(), codingConceptProperty.getDisplay());
}
default ->
throw new InternalErrorException(Msg.code(2451) + "Property type " + type + " is not supported.");
default -> {
IValidationSupport.StringConceptProperty stringConceptProperty = (IValidationSupport.StringConceptProperty) theConceptProperty;
assertEquals(theExpectedValue.toString(), stringConceptProperty.getValue());
}
}
}
@ -149,8 +124,27 @@ public class LookupCodeDstu3Test {
public Stream<Arguments> getPropertyValues() {
return Stream.of(
// FHIR DSTU3 spec types
Arguments.arguments(new StringType("value")),
Arguments.arguments(new Coding("code", "system", "display"))
Arguments.arguments(new Coding("code", "system", "display")),
Arguments.arguments(new CodeType("code")),
Arguments.arguments(new BooleanType(true)),
Arguments.arguments(new IntegerType(1)),
Arguments.arguments(new DateTimeType(Calendar.getInstance())),
// other types will also not fail for Remote Terminology
Arguments.arguments(new DecimalType(1.1)),
Arguments.arguments(new InstantType(Calendar.getInstance())),
Arguments.arguments(new Type() {
@Override
protected Type typedCopy() {
return this;
}
@Override
public String toString() {
return "randomType";
}
})
);
}

View File

@ -2,17 +2,14 @@ package org.hl7.fhir.r4.validation;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.support.IValidationSupport;
import ca.uhn.fhir.i18n.Msg;
import ca.uhn.fhir.jpa.model.util.JpaConstants;
import ca.uhn.fhir.rest.annotation.Operation;
import ca.uhn.fhir.rest.annotation.OperationParam;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.client.interceptor.LoggingInterceptor;
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
import ca.uhn.fhir.test.utilities.server.RestfulServerExtension;
import jakarta.servlet.http.HttpServletRequest;
import org.hl7.fhir.common.hapi.validation.ILookupCodeTest.ILookupCodeSupportedPropertyTest;
import org.hl7.fhir.common.hapi.validation.ILookupCodeTest.ILookupCodeUnsupportedPropertyTypeTest;
import org.hl7.fhir.common.hapi.validation.ILookupCodeTest.IMyCodeSystemProvider;
import org.hl7.fhir.common.hapi.validation.ILookupCodeTest.IMySimpleCodeSystemProvider;
import org.hl7.fhir.common.hapi.validation.support.RemoteTerminologyServiceValidationSupport;
@ -23,6 +20,10 @@ import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.CodeSystem;
import org.hl7.fhir.r4.model.CodeType;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.DateTimeType;
import org.hl7.fhir.r4.model.DecimalType;
import org.hl7.fhir.r4.model.InstantType;
import org.hl7.fhir.r4.model.IntegerType;
import org.hl7.fhir.r4.model.Parameters;
import org.hl7.fhir.r4.model.StringType;
import org.hl7.fhir.r4.model.Type;
@ -33,6 +34,7 @@ import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.params.provider.Arguments;
import java.util.Calendar;
import java.util.List;
import java.util.stream.Stream;
@ -52,41 +54,6 @@ public class LookupCodeR4Test {
mySvc.addClientInterceptor(new LoggingInterceptor(true));
}
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@Nested
class LookupCodeUnsupportedPropertyTypeR4Test implements ILookupCodeUnsupportedPropertyTypeTest {
private final MySimplePropertyCodeSystemProviderR4 myMySimplePropertyCodeSystemProvider = new MySimplePropertyCodeSystemProviderR4();
@Override
public IMySimpleCodeSystemProvider getCodeSystemProvider() {
return myMySimplePropertyCodeSystemProvider;
}
@Override
public RemoteTerminologyServiceValidationSupport getService() {
return mySvc;
}
@Override
public String getInvalidValueErrorCode() {
return "HAPI-2452";
}
@Override
public String getInvalidValueErrorCodeForConvert() {
return "HAPI-2453";
}
@BeforeEach
public void before() {
// TODO: use another type when "code" is added to the supported types
myMySimplePropertyCodeSystemProvider.myPropertyName = "somePropertyName";
myMySimplePropertyCodeSystemProvider.myPropertyValue = new CodeType("someCode");
ourRestfulServerExtension.getRestfulServer().registerProvider(myMySimplePropertyCodeSystemProvider);
}
}
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@Nested
class ILookupCodeSupportedPropertyR4Test implements ILookupCodeSupportedPropertyTest {
@ -113,8 +80,13 @@ public class LookupCodeR4Test {
String type = theConceptProperty.getType();
switch (type) {
case IValidationSupport.TYPE_STRING -> {
assertTrue(theExpectedValue instanceof StringType);
StringType stringValue = (StringType) theExpectedValue;
if (!(theExpectedValue instanceof StringType stringValue)) {
// TODO: remove this branch to test other property types as per FHIR spec https://github.com/hapifhir/hapi-fhir/issues/5699
IValidationSupport.StringConceptProperty stringConceptProperty = (IValidationSupport.StringConceptProperty) theConceptProperty;
assertEquals(theExpectedValue.toString(), stringConceptProperty.getValue());
break;
}
// StringType stringValue = (StringType) theExpectedValue;
assertTrue(theConceptProperty instanceof IValidationSupport.StringConceptProperty);
IValidationSupport.StringConceptProperty stringConceptProperty = (IValidationSupport.StringConceptProperty) theConceptProperty;
assertEquals(stringValue.getValue(), stringConceptProperty.getValue());
@ -128,8 +100,10 @@ public class LookupCodeR4Test {
assertEquals(coding.getSystem(), codingConceptProperty.getCodeSystem());
assertEquals(coding.getDisplay(), codingConceptProperty.getDisplay());
}
default ->
throw new InternalErrorException(Msg.code(2451) + "Property type " + type + " is not supported.");
default -> {
IValidationSupport.StringConceptProperty stringConceptProperty = (IValidationSupport.StringConceptProperty) theConceptProperty;
assertEquals(theExpectedValue.toString(), stringConceptProperty.getValue());
}
}
}
@ -146,13 +120,29 @@ public class LookupCodeR4Test {
public Stream<Arguments> getPropertyValues() {
return Stream.of(
// FHIR R4 spec types
Arguments.arguments(new StringType("value")),
Arguments.arguments(new Coding("code", "system", "display"))
Arguments.arguments(new Coding("code", "system", "display")),
Arguments.arguments(new CodeType("code")),
Arguments.arguments(new BooleanType(true)),
Arguments.arguments(new IntegerType(1)),
Arguments.arguments(new DateTimeType(Calendar.getInstance())),
Arguments.arguments(new DecimalType(1.1)),
// other types will also not fail for Remote Terminology
Arguments.arguments(new InstantType(Calendar.getInstance())),
Arguments.arguments(new Type() {
@Override
protected Type typedCopy() {
return this;
}
@Override
public String toString() {
return "randomType";
}
})
);
}
public Stream<Arguments> getDesignations() {
return Stream.of(
Arguments.arguments(new IValidationSupport.ConceptDesignation().setLanguage("en").setUseCode("code1").setUseSystem("system-1").setUseDisplay("display").setValue("some value")),

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -9,7 +9,7 @@
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<packaging>pom</packaging>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<name>HAPI-FHIR</name>
<description>An open-source implementation of the FHIR specification in Java.</description>
@ -1002,7 +1002,7 @@
<ucum_version>1.0.8</ucum_version>
<!-- CQL Support -->
<clinical-reasoning.version>3.0.0-PRE14</clinical-reasoning.version>
<clinical-reasoning.version>3.0.0-PRE17</clinical-reasoning.version>
<!-- Site properties -->
<fontawesomeVersion>5.4.1</fontawesomeVersion>

View File

@ -140,7 +140,9 @@ jobs:
# want to fail fast if there is an issue, and avoid running the tests more than once, so it doesn't take all day.
timeoutInMinutes: 360
dependsOn: ['get_release_version', 'get_branch_id']
container: maven:3.9-eclipse-temurin-21-jammy
container:
image: smilecdr/hapi-build:latest
steps:
- task: Cache@2
inputs:
@ -153,7 +155,7 @@ jobs:
releaseType: stable
- task: Maven@3
env:
JAVA_HOME_11_X64: /usr/java/openjdk
JAVA_HOME_11_X64: /opt/java/openjdk
displayName: Checkstyle Build
inputs:
mavenPomFile: 'hapi-fhir-checkstyle/pom.xml'

View File

@ -7,7 +7,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>7.1.4-SNAPSHOT</version>
<version>7.1.5-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>