import org.joda.time.DateTime; import org.junit.Before; import org.junit.Test; import org.openehr.rm.datatypes.quantity.datetime.DvDateTime; import org.openehr.rm.datatypes.text.DvCodedText; import se.cambio.cds.gdl.model.expression.OperatorKind; import se.cambio.cds.model.facade.execution.vo.GeneratedArchetypeReference; import se.cambio.cds.model.facade.execution.vo.PredicateGeneratedElementInstanceBuilder; import se.cambio.cds.model.instance.ArchetypeReference; import se.cambio.cds.model.instance.ElementInstance; import se.cambio.cds.util.Domains; import se.cambio.cds.util.EHRDataFilterUtil; import se.cambio.cds.util.GeneratedElementInstanceCollection; import se.cambio.openehr.util.OpenEHRConstUI; import se.cambio.openehr.util.UserConfigurationManager; import se.cambio.openehr.util.exceptions.InternalErrorException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.Set; import static org.junit.Assert.assertEquals; public class EHRFilteringTest { @Before public void configCM() throws URISyntaxException, InternalErrorException { UserConfigurationManager.setParameter(UserConfigurationManager.TERMINOLOGIES_FOLDER_KW, EHRFilteringTest.class.getClassLoader().getResource("terminologies").toURI().getPath()); UserConfigurationManager.setParameter(UserConfigurationManager.ARCHETYPES_FOLDER_KW, EHRFilteringTest.class.getClassLoader().getResource("archetypes").toURI().getPath()); UserConfigurationManager.setParameter(UserConfigurationManager.TEMPLATES_FOLDER_KW, EHRFilteringTest.class.getClassLoader().getResource("templates").toURI().getPath()); } private Collection<ElementInstance> generateElementInstances(){ Collection<ElementInstance> elementInstances = new ArrayList<ElementInstance>(); ArchetypeReference ar = new ArchetypeReference(Domains.EHR_ID, "openEHR-EHR-EVALUATION.contact.v1", null); elementInstances.add( new ElementInstance( "openEHR-EHR-EVALUATION.contact.v1/data[at0001]/items[at0006]", new DvCodedText("Inpatient", "local", "at0007"), ar, null, null)); DvDateTime dvDateTime = new DvDateTime("2013-04-05T12:01:00"); elementInstances.add( new ElementInstance( "openEHR-EHR-EVALUATION.contact.v1/data[at0001]/items[at0003]", dvDateTime, ar, null, null)); ar = new ArchetypeReference(Domains.EHR_ID, "openEHR-EHR-EVALUATION.contact.v1", null); elementInstances.add( new ElementInstance( "openEHR-EHR-EVALUATION.contact.v1/data[at0001]/items[at0006]", new DvCodedText("Inpatient", "local", "at0008"), ar, null, null)); dvDateTime = new DvDateTime("2013-06-05T12:01:00"); elementInstances.add( new ElementInstance( "openEHR-EHR-EVALUATION.contact.v1/data[at0001]/items[at0003]", dvDateTime, ar, null, null)); return elementInstances; } private DateTime getCurrentDateTime() { return new DateTime(Calendar.getInstance().getTimeInMillis()); } @Test public void shouldFilterUsingOnePredicate(){ GeneratedElementInstanceCollection geic = new GeneratedElementInstanceCollection(); GeneratedArchetypeReference gar = new GeneratedArchetypeReference(Domains.EHR_ID, "openEHR-EHR-EVALUATION.contact.v1", null); new PredicateGeneratedElementInstanceBuilder() .setId("openEHR-EHR-EVALUATION.contact.v1/data[at0001]/items[at0003]") .setArchetypeReference(gar) .setNullFlavour(OpenEHRConstUI.NULL_FLAVOUR_CODE_NO_INFO) .setOperatorKind(OperatorKind.MIN) .createPredicateGeneratedElementInstance(); geic.add(gar); Collection<ElementInstance> elementInstances = generateElementInstances(); Set<ArchetypeReference> archetypeReferenceSet = EHRDataFilterUtil.filterEHRData ("testEHRId", getCurrentDateTime(), geic.getAllArchetypeReferencesByDomain(Domains.EHR_ID), elementInstances); assertEquals(1, archetypeReferenceSet.size()); } @Test public void shouldNotFilterMultiplePredicatesWithSameAR(){ GeneratedElementInstanceCollection geic = new GeneratedElementInstanceCollection(); GeneratedArchetypeReference gar = new GeneratedArchetypeReference(Domains.EHR_ID, "openEHR-EHR-EVALUATION.contact.v1", null); new PredicateGeneratedElementInstanceBuilder() .setId("openEHR-EHR-EVALUATION.contact.v1/data[at0001]/items[at0006]") .setDataValue(new DvCodedText("Inpatient", "local", "at0007")) .setArchetypeReference(gar) .setOperatorKind(OperatorKind.EQUALITY) .createPredicateGeneratedElementInstance(); new PredicateGeneratedElementInstanceBuilder() .setId("openEHR-EHR-EVALUATION.contact.v1/data[at0001]/items[at0003]") .setArchetypeReference(gar) .setNullFlavour(OpenEHRConstUI.NULL_FLAVOUR_CODE_NO_INFO) .setOperatorKind(OperatorKind.MIN) .createPredicateGeneratedElementInstance(); geic.add(gar); Collection<ElementInstance> elementInstances = generateElementInstances(); Set<ArchetypeReference> archetypeReferenceSet = EHRDataFilterUtil.filterEHRData("testEHRId", getCurrentDateTime(), geic.getAllArchetypeReferencesByDomain(Domains.EHR_ID), elementInstances); assertEquals(2, archetypeReferenceSet.size()); } @Test public void shouldNotFilterMultiplePredicatesWithDifferentAR(){ GeneratedElementInstanceCollection geic = new GeneratedElementInstanceCollection(); GeneratedArchetypeReference gar = new GeneratedArchetypeReference(Domains.EHR_ID, "openEHR-EHR-EVALUATION.contact.v1", null); new PredicateGeneratedElementInstanceBuilder() .setId("openEHR-EHR-EVALUATION.contact.v1/data[at0001]/items[at0006]") .setDataValue(new DvCodedText("Inpatient", "local", "at0007")) .setArchetypeReference(gar) .setOperatorKind(OperatorKind.EQUALITY) .createPredicateGeneratedElementInstance(); geic.add(gar); gar = new GeneratedArchetypeReference(Domains.EHR_ID, "openEHR-EHR-EVALUATION.contact.v1", null); new PredicateGeneratedElementInstanceBuilder() .setId("openEHR-EHR-EVALUATION.contact.v1/data[at0001]/items[at0003]") .setArchetypeReference(gar) .setNullFlavour(OpenEHRConstUI.NULL_FLAVOUR_CODE_NO_INFO) .setOperatorKind(OperatorKind.MIN) .createPredicateGeneratedElementInstance(); geic.add(gar); Collection<ElementInstance> elementInstances = generateElementInstances(); Set<ArchetypeReference> archetypeReferenceSet = EHRDataFilterUtil.filterEHRData("testEHRId", getCurrentDateTime(), geic.getAllArchetypeReferencesByDomain(Domains.EHR_ID), elementInstances); assertEquals(2, archetypeReferenceSet.size()); } }