use of org.ehrbase.client.aql.containment.ContainmentExpression in project openEHR_SDK by ehrbase.
the class ContainmentBinder method handleContainmentDto.
public void handleContainmentDto(ContainmentDto dto, MutablePair<ContainmentExpression, Map<Integer, Containment>> result) {
ContainmentExpression containmentExpression;
Map<Integer, Containment> containmentMap = new HashMap<>();
ContainmentExpression containmentExpression1;
Containment containment = new Containment(dto.getArchetypeId());
containmentExpression1 = containment;
containmentMap.put(dto.getId(), containment);
if (dto.getContains() != null) {
Pair<ContainmentExpression, Map<Integer, Containment>> pair = buildContainment(dto.getContains());
containment.setContains(pair.getLeft());
containmentMap.putAll(pair.getRight());
}
containmentExpression = containmentExpression1;
result.setLeft(containmentExpression);
result.setRight(containmentMap);
}
use of org.ehrbase.client.aql.containment.ContainmentExpression in project openEHR_SDK by ehrbase.
the class CoronaTestIT method testCoronaWithJoin.
@Test
@Ignore
public void testCoronaWithJoin() throws IOException {
ehr = openEhrClient.ehrEndpoint().createEhr();
Composition composition = new CanonicalJson().unmarshal(IOUtils.toString(CompositionTestDataCanonicalJson.CORONA.getStream(), StandardCharsets.UTF_8), Composition.class);
Flattener flattener = new Flattener(new TestDataTemplateProvider());
CoronaAnamneseComposition coronaAnamneseComposition = flattener.flatten(composition, CoronaAnamneseComposition.class);
openEhrClient.compositionEndpoint(ehr).mergeCompositionEntity(coronaAnamneseComposition);
openEhrClient.compositionEndpoint(ehr).mergeCompositionEntity(TestData.buildEhrbaseBloodPressureSimpleDeV0());
assertThat(openEhrClient.compositionEndpoint(ehr).find(coronaAnamneseComposition.getVersionUid().getUuid(), CoronaAnamneseComposition.class)).isNotNull();
CoronaAnamneseCompositionContainment coronaAnamneseCompositionContainment = CoronaAnamneseCompositionContainment.getInstance();
SymptomeSectionContainment symptomeSectionContainment = SymptomeSectionContainment.getInstance();
HustenObservationContainment hustenObservationContainment = HustenObservationContainment.getInstance();
FieberOderErhohteKorpertemperaturObservationContainment fieberOderErhohteKorpertemperaturObservationContainment = FieberOderErhohteKorpertemperaturObservationContainment.getInstance();
HeiserkeitObservationContainment heiserkeitObservationContainment = HeiserkeitObservationContainment.getInstance();
RisikogebietSectionContainment risikogebietSectionContainment = RisikogebietSectionContainment.getInstance();
ReisefallObservationContainment reisefallObservationContainment = ReisefallObservationContainment.getInstance();
// @formatter:off
ContainmentExpression containmentExpression = coronaAnamneseCompositionContainment.contains(symptomeSectionContainment.contains(hustenObservationContainment).and(risikogebietSectionContainment.contains(reisefallObservationContainment)));
// @formatter:on
EntityQuery<Record3<VorhandenDefiningCode, Language, Language>> entityQuery = Query.buildEntityQuery(containmentExpression, hustenObservationContainment.VORHANDEN_DEFINING_CODE, coronaAnamneseCompositionContainment.LANGUAGE, reisefallObservationContainment.LANGUAGE);
Parameter<UUID> ehrIdParameter = entityQuery.buildParameter();
entityQuery.where(Condition.equal(EhrFields.EHR_ID(), ehrIdParameter));
/*
Select
o0/data[at0001]/events[at0002]/data[at0003]/items[at0022]/items[at0005]/value/defining_Code as F0,
c1/language as F1,
o2/language as F2
from EHR e
contains COMPOSITION c1[openEHR-EHR-COMPOSITION.report.v1] contains (
(SECTION s3[openEHR-EHR-SECTION.adhoc.v1] contains
OBSERVATION o0[openEHR-EHR-OBSERVATION.symptom_sign_screening.v0] )
and
( SECTION s4[openEHR-EHR-SECTION.adhoc.v1] contains
OBSERVATION o2[openEHR-EHR-OBSERVATION.travel_event.v0] )
)
where e/ehr_id/value = $parm0
*/
List<Record3<VorhandenDefiningCode, Language, Language>> actual = openEhrClient.aqlEndpoint().execute(entityQuery, ehrIdParameter.setValue(ehr));
assertThat(actual).extracting(Record3::value1, Record3::value2, Record3::value3).containsExactlyInAnyOrder(new Tuple(VorhandenDefiningCode.VORHANDEN, Language.DE, Language.DE));
}
use of org.ehrbase.client.aql.containment.ContainmentExpression in project openEHR_SDK by ehrbase.
the class EntityQueryTest method buildAqlWithNativePath.
@Test
public void buildAqlWithNativePath() {
BefundObservationContainment befundObservationContainment = BefundObservationContainment.getInstance();
ProVirusClusterContainment proVirusClusterContainment = ProVirusClusterContainment.getInstance();
ProbeClusterContainment probeClusterContainment = ProbeClusterContainment.getInstance();
Containment compositionContainment = new Containment("COMPOSITION");
ContainmentExpression containment = compositionContainment.contains(befundObservationContainment).contains(proVirusClusterContainment.and(probeClusterContainment));
EntityQuery<Record3<String, TemporalAccessor, UUID>> entityQuery = Query.buildEntityQuery(containment, proVirusClusterContainment.VIRUS_VALUE, probeClusterContainment.ZEITPUNKT_DER_PROBENENTNAHME_VALUE, new NativeSelectAqlField<>(compositionContainment, "/uid/value", "uid", UUID.class));
entityQuery.where(Condition.equal(new NativeSelectAqlField<>(compositionContainment, "/name/value", String.class), "Mikrobiologischer Befund"));
assertThat(entityQuery.buildAql()).isEqualTo("Select c0/items[at0024]/value/value as virusValue, c1/items[at0015]/value/value as zeitpunktDerProbenentnahmeValue, c2/uid/value as uid " + "from EHR e " + "contains COMPOSITION c2 " + "contains OBSERVATION o3[openEHR-EHR-OBSERVATION.laboratory_test_result.v1] " + "contains (CLUSTER c0[openEHR-EHR-CLUSTER.laboratory_test_analyte.v1] and CLUSTER c1[openEHR-EHR-CLUSTER.specimen.v1]) " + "where c2/name/value = 'Mikrobiologischer Befund'");
}
use of org.ehrbase.client.aql.containment.ContainmentExpression in project openEHR_SDK by ehrbase.
the class CoronaTestIT method testNUMResearchCase_5.
/**
* see https://wiki.vitagroup.ag/display/NUM/Research+Repository
*
* Containment test:
*
* contains COMPOSITION c[openEHR-EHR-COMPOSITION.event_summary.v0]
* contains
* (CLUSTER n[openEHR-EHR-CLUSTER.case_identification.v0]
* and ADMIN_ENTRY u[openEHR-EHR-ADMIN_ENTRY.hospitalization.v0]
* contains (CLUSTER a[openEHR-EHR-CLUSTER.location.v1]))
*/
@Test
public void testNUMResearchCase_5() {
ehr = openEhrClient.ehrEndpoint().createEhr();
openEhrClient.compositionEndpoint(ehr).mergeCompositionEntity(TestData.buildTestPatientenaufenthaltComposition());
// build AQL
PatientenaufenthaltCompositionContainment patientenaufenthaltCompositionContainment = PatientenaufenthaltCompositionContainment.getInstance();
AbteilungsfallClusterContainment abteilungsfallClusterContainment = AbteilungsfallClusterContainment.getInstance();
VersorgungsortAdminEntryContainment versorgungsortAdminEntryContainment = VersorgungsortAdminEntryContainment.getInstance();
StandortClusterContainment standortClusterContainment = StandortClusterContainment.getInstance();
ContainmentExpression containmentExpression = patientenaufenthaltCompositionContainment.contains(abteilungsfallClusterContainment.and(versorgungsortAdminEntryContainment.contains(standortClusterContainment)));
// select set values from test data
EntityQuery<Record3<TemporalAccessor, TemporalAccessor, String>> entityQuery = Query.buildEntityQuery(containmentExpression, versorgungsortAdminEntryContainment.BEGINN_VALUE, versorgungsortAdminEntryContainment.ENDE_VALUE, versorgungsortAdminEntryContainment.GRUND_DES_AUFENTHALTES_VALUE);
Parameter<UUID> ehrIdParameter = entityQuery.buildParameter();
entityQuery.where(Condition.equal(EhrFields.EHR_ID(), ehrIdParameter));
List<Record3<TemporalAccessor, TemporalAccessor, String>> actual = openEhrClient.aqlEndpoint().execute(entityQuery, ehrIdParameter.setValue(ehr));
assertThat(actual).extracting(Record3::value1, Record3::value2, Record3::value3).containsExactlyInAnyOrder(new Tuple(new DvDateTime("2020-01-01T10:00Z").getValue(), new DvDateTime("2020-01-01T12:00Z").getValue(), "test value"));
}
use of org.ehrbase.client.aql.containment.ContainmentExpression in project openEHR_SDK by ehrbase.
the class CoronaTestIT method testNUMResearchCase_8.
/**
* see https://wiki.vitagroup.ag/display/NUM/Research+Repository
*
* Containment test UC 8:
*
* contains COMPOSITION c
* contains OBSERVATION v[openEHR-EHR-OBSERVATION.laboratory_test_result.v1]
* contains (
* CLUSTER h[openEHR-EHR-CLUSTER.laboratory_test_panel.v0] and
* CLUSTER x[openEHR-EHR-CLUSTER.specimen.v1] and
* CLUSTER q[openEHR-EHR-CLUSTER.laboratory_test_analyte.v1])
*/
@Test
public void testNUMResearchCase_8() {
VirologischerBefundComposition virologischerBefundComposition = TestData.buildTestVirologischerBefundComposition();
assertThat(virologischerBefundComposition.getBefund()).isNotNull();
ehr = openEhrClient.ehrEndpoint().createEhr();
openEhrClient.compositionEndpoint(ehr).mergeCompositionEntity(virologischerBefundComposition);
// build AQL expression
Containment compositionContainment = new Containment("COMPOSITION");
BefundObservationContainment befundObservationContainment = BefundObservationContainment.getInstance();
ProbeClusterContainment probeClusterContainment = ProbeClusterContainment.getInstance();
KulturClusterContainment kulturClusterContainment = KulturClusterContainment.getInstance();
ProVirusClusterContainment proVirusClusterContainment = ProVirusClusterContainment.getInstance();
ContainmentExpression containmentExpression = compositionContainment.contains(befundObservationContainment.contains(kulturClusterContainment.and(probeClusterContainment.and(proVirusClusterContainment))));
EntityQuery<Record2<String, Long>> entityQuery = Query.buildEntityQuery(containmentExpression, proVirusClusterContainment.VIRUS_VALUE, proVirusClusterContainment.ANALYSEERGEBNIS_REIHENFOLGE_MAGNITUDE);
Parameter<UUID> ehrIdParameter = entityQuery.buildParameter();
entityQuery.where(Condition.equal(EhrFields.EHR_ID(), ehrIdParameter).and(Condition.equal(new NativeSelectAqlField<>(compositionContainment, "/name/value", String.class), "Virologischer Befund")));
List<Record2<String, Long>> actual = openEhrClient.aqlEndpoint().execute(entityQuery, ehrIdParameter.setValue(ehr));
// NB. At the moment, we cannot specify DISTINCT with SDK
assertThat(actual).extracting(Record2::value1, Record2::value2).containsExactlyInAnyOrder(new Tuple("SARS-Cov-2", 32L), new Tuple("SARS-Cov-2", 34L), new Tuple("SARS-Cov-2", 32L), new Tuple("SARS-Cov-2", 34L));
}
Aggregations