Fixes to loinc mapping
This commit is contained in:
parent
260aa9e9fa
commit
b3a9ea263f
|
@ -815,7 +815,7 @@ public class SearchBuilder implements ISearchBuilder {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate = join.<Object>get("myUri").as(String.class).in(toFind);
|
predicate = join.get("myUri").as(String.class).in(toFind);
|
||||||
|
|
||||||
} else if (param.getQualifier() == UriParamQualifierEnum.BELOW) {
|
} else if (param.getQualifier() == UriParamQualifierEnum.BELOW) {
|
||||||
predicate = myBuilder.like(join.get("myUri").as(String.class), createLeftMatchLikeExpression(value));
|
predicate = myBuilder.like(join.get("myUri").as(String.class), createLeftMatchLikeExpression(value));
|
||||||
|
@ -953,8 +953,8 @@ public class SearchBuilder implements ISearchBuilder {
|
||||||
|
|
||||||
Predicate lb = null;
|
Predicate lb = null;
|
||||||
if (lowerBound != null) {
|
if (lowerBound != null) {
|
||||||
Predicate gt = theBuilder.greaterThanOrEqualTo(theFrom.<Date>get("myValueLow"), lowerBound);
|
Predicate gt = theBuilder.greaterThanOrEqualTo(theFrom.get("myValueLow"), lowerBound);
|
||||||
Predicate lt = theBuilder.greaterThanOrEqualTo(theFrom.<Date>get("myValueHigh"), lowerBound);
|
Predicate lt = theBuilder.greaterThanOrEqualTo(theFrom.get("myValueHigh"), lowerBound);
|
||||||
if (theRange.getLowerBound().getPrefix() == ParamPrefixEnum.STARTS_AFTER || theRange.getLowerBound().getPrefix() == ParamPrefixEnum.EQUAL) {
|
if (theRange.getLowerBound().getPrefix() == ParamPrefixEnum.STARTS_AFTER || theRange.getLowerBound().getPrefix() == ParamPrefixEnum.EQUAL) {
|
||||||
lb = gt;
|
lb = gt;
|
||||||
} else {
|
} else {
|
||||||
|
@ -964,8 +964,8 @@ public class SearchBuilder implements ISearchBuilder {
|
||||||
|
|
||||||
Predicate ub = null;
|
Predicate ub = null;
|
||||||
if (upperBound != null) {
|
if (upperBound != null) {
|
||||||
Predicate gt = theBuilder.lessThanOrEqualTo(theFrom.<Date>get("myValueLow"), upperBound);
|
Predicate gt = theBuilder.lessThanOrEqualTo(theFrom.get("myValueLow"), upperBound);
|
||||||
Predicate lt = theBuilder.lessThanOrEqualTo(theFrom.<Date>get("myValueHigh"), upperBound);
|
Predicate lt = theBuilder.lessThanOrEqualTo(theFrom.get("myValueHigh"), upperBound);
|
||||||
if (theRange.getUpperBound().getPrefix() == ParamPrefixEnum.ENDS_BEFORE || theRange.getUpperBound().getPrefix() == ParamPrefixEnum.EQUAL) {
|
if (theRange.getUpperBound().getPrefix() == ParamPrefixEnum.ENDS_BEFORE || theRange.getUpperBound().getPrefix() == ParamPrefixEnum.EQUAL) {
|
||||||
ub = lt;
|
ub = lt;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2008,15 +2008,15 @@ public class SearchBuilder implements ISearchBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Predicate> createLastUpdatedPredicates(final DateRangeParam theLastUpdated, CriteriaBuilder builder, From<?, ResourceTable> from) {
|
private static List<Predicate> createLastUpdatedPredicates(final DateRangeParam theLastUpdated, CriteriaBuilder builder, From<?, ResourceTable> from) {
|
||||||
List<Predicate> lastUpdatedPredicates = new ArrayList<Predicate>();
|
List<Predicate> lastUpdatedPredicates = new ArrayList<>();
|
||||||
if (theLastUpdated != null) {
|
if (theLastUpdated != null) {
|
||||||
if (theLastUpdated.getLowerBoundAsInstant() != null) {
|
if (theLastUpdated.getLowerBoundAsInstant() != null) {
|
||||||
ourLog.debug("LastUpdated lower bound: {}", new InstantDt(theLastUpdated.getLowerBoundAsInstant()));
|
ourLog.debug("LastUpdated lower bound: {}", new InstantDt(theLastUpdated.getLowerBoundAsInstant()));
|
||||||
Predicate predicateLower = builder.greaterThanOrEqualTo(from.<Date>get("myUpdated"), theLastUpdated.getLowerBoundAsInstant());
|
Predicate predicateLower = builder.greaterThanOrEqualTo(from.get("myUpdated"), theLastUpdated.getLowerBoundAsInstant());
|
||||||
lastUpdatedPredicates.add(predicateLower);
|
lastUpdatedPredicates.add(predicateLower);
|
||||||
}
|
}
|
||||||
if (theLastUpdated.getUpperBoundAsInstant() != null) {
|
if (theLastUpdated.getUpperBoundAsInstant() != null) {
|
||||||
Predicate predicateUpper = builder.lessThanOrEqualTo(from.<Date>get("myUpdated"), theLastUpdated.getUpperBoundAsInstant());
|
Predicate predicateUpper = builder.lessThanOrEqualTo(from.get("myUpdated"), theLastUpdated.getUpperBoundAsInstant());
|
||||||
lastUpdatedPredicates.add(predicateUpper);
|
lastUpdatedPredicates.add(predicateUpper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2262,10 +2262,7 @@ public class SearchBuilder implements ISearchBuilder {
|
||||||
if (myNext == null) {
|
if (myNext == null) {
|
||||||
fetchNext();
|
fetchNext();
|
||||||
}
|
}
|
||||||
if (myNext == NO_MORE) {
|
return myNext != NO_MORE;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -758,8 +758,6 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc
|
||||||
// Grab the existing versions so we can delete them later
|
// Grab the existing versions so we can delete them later
|
||||||
List<TermCodeSystemVersion> existing = myCodeSystemVersionDao.findByCodeSystemResource(theCodeSystemResourcePid);
|
List<TermCodeSystemVersion> existing = myCodeSystemVersionDao.findByCodeSystemResource(theCodeSystemResourcePid);
|
||||||
|
|
||||||
verifyNoDuplicates(theCodeSystemVersion.getConcepts(), new HashSet<String>());
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For now we always delete old versions.. At some point it would be nice to allow configuration to keep old versions
|
* For now we always delete old versions.. At some point it would be nice to allow configuration to keep old versions
|
||||||
*/
|
*/
|
||||||
|
@ -808,8 +806,8 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc
|
||||||
ourLog.info("Validating all codes in CodeSystem for storage (this can take some time for large sets)");
|
ourLog.info("Validating all codes in CodeSystem for storage (this can take some time for large sets)");
|
||||||
|
|
||||||
// Validate the code system
|
// Validate the code system
|
||||||
ArrayList<String> conceptsStack = new ArrayList<String>();
|
ArrayList<String> conceptsStack = new ArrayList<>();
|
||||||
IdentityHashMap<TermConcept, Object> allConcepts = new IdentityHashMap<TermConcept, Object>();
|
IdentityHashMap<TermConcept, Object> allConcepts = new IdentityHashMap<>();
|
||||||
int totalCodeCount = 0;
|
int totalCodeCount = 0;
|
||||||
for (TermConcept next : theCodeSystemVersion.getConcepts()) {
|
for (TermConcept next : theCodeSystemVersion.getConcepts()) {
|
||||||
totalCodeCount += validateConceptForStorage(next, theCodeSystemVersion, conceptsStack, allConcepts);
|
totalCodeCount += validateConceptForStorage(next, theCodeSystemVersion, conceptsStack, allConcepts);
|
||||||
|
@ -911,15 +909,6 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void verifyNoDuplicates(Collection<TermConcept> theConcepts, Set<String> theCodes) {
|
|
||||||
for (TermConcept next : theConcepts) {
|
|
||||||
if (!theCodes.add(next.getCode())) {
|
|
||||||
throw new InvalidRequestException("Duplicate code " + next.getCode() + " found in codesystem after checking " + theCodes.size() + " codes");
|
|
||||||
}
|
|
||||||
verifyNoDuplicates(next.getChildren().stream().map(TermConceptParentChildLink::getChild).collect(Collectors.toList()), theCodes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is present only for unit tests, do not call from client code
|
* This method is present only for unit tests, do not call from client code
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -4,6 +4,7 @@ import ca.uhn.fhir.jpa.dao.DaoConfig;
|
||||||
import ca.uhn.fhir.rest.server.interceptor.RequestValidatingInterceptor;
|
import ca.uhn.fhir.rest.server.interceptor.RequestValidatingInterceptor;
|
||||||
import ca.uhn.fhir.validation.ResultSeverityEnum;
|
import ca.uhn.fhir.validation.ResultSeverityEnum;
|
||||||
import net.ttddyy.dsproxy.listener.ThreadQueryCountHolder;
|
import net.ttddyy.dsproxy.listener.ThreadQueryCountHolder;
|
||||||
|
import net.ttddyy.dsproxy.listener.logging.SLF4JLogLevel;
|
||||||
import net.ttddyy.dsproxy.support.ProxyDataSourceBuilder;
|
import net.ttddyy.dsproxy.support.ProxyDataSourceBuilder;
|
||||||
import org.apache.commons.dbcp2.BasicDataSource;
|
import org.apache.commons.dbcp2.BasicDataSource;
|
||||||
import org.hibernate.jpa.HibernatePersistenceProvider;
|
import org.hibernate.jpa.HibernatePersistenceProvider;
|
||||||
|
@ -104,7 +105,7 @@ public class TestR4Config extends BaseJavaConfigR4 {
|
||||||
|
|
||||||
DataSource dataSource = ProxyDataSourceBuilder
|
DataSource dataSource = ProxyDataSourceBuilder
|
||||||
.create(retVal)
|
.create(retVal)
|
||||||
// .logQueryBySlf4j(SLF4JLogLevel.INFO, "SQL")
|
.logQueryBySlf4j(SLF4JLogLevel.INFO, "SQL")
|
||||||
.logSlowQueryBySlf4j(10, TimeUnit.SECONDS)
|
.logSlowQueryBySlf4j(10, TimeUnit.SECONDS)
|
||||||
.countQuery(new ThreadQueryCountHolder())
|
.countQuery(new ThreadQueryCountHolder())
|
||||||
.build();
|
.build();
|
||||||
|
|
|
@ -182,6 +182,15 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
|
||||||
return ids;
|
return ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Ignore
|
||||||
|
public void test() throws IOException {
|
||||||
|
HttpGet get = new HttpGet(ourServerBase + "/QuestionnaireResponse?_count=50&status=completed&questionnaire=ARIncenterAbsRecord&_lastUpdated=%3E"+UrlUtil.escapeUrlParam("=2018-01-01")+"&context.organization=O3435");
|
||||||
|
ourLog.info("*** MAKING QUERY");
|
||||||
|
ourHttpClient.execute(get);
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBundleCreate() throws Exception {
|
public void testBundleCreate() throws Exception {
|
||||||
IGenericClient client = myClient;
|
IGenericClient client = myClient;
|
||||||
|
|
|
@ -205,7 +205,7 @@ public class TerminologySvcImplDstu3Test extends BaseJpaDstu3Test {
|
||||||
ValueSet outcome = myTermSvc.expandValueSet(vs);
|
ValueSet outcome = myTermSvc.expandValueSet(vs);
|
||||||
|
|
||||||
codes = toCodesContains(outcome.getExpansion().getContains());
|
codes = toCodesContains(outcome.getExpansion().getContains());
|
||||||
assertThat(codes, containsInAnyOrder("ParentA", "childAAA", "childAAB", "childAA", "childAB", "ParentB"));
|
assertThat(codes, containsInAnyOrder("ParentWithNoChildrenA", "ParentWithNoChildrenB", "ParentWithNoChildrenC", "ParentA", "childAAA", "childAAB", "childAA", "childAB", "ParentB"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue